# Introduction

Get Started with DOKU for your Payment Solutions

{% embed url="<https://www.youtube.com/watch?feature=youtu.be&si=8QjoPKPb97E-URtg&v=-DWFwvdEybg>" %}

DOKU (**PT Nusa Satu Inti Artha**), founded in 2007, is Indonesia’s first locally owned electronic payment solutions provider. As a pioneer in the payment gateway industry, DOKU has played a key role in offering secure, reliable, and locally tailored payment solutions that address the evolving needs of online merchants. Since 2021, DOKU has expanded its presence to Malaysia, with **SimplePay Gateway Sdn. Bhd.** becoming part of the DOKU Group. This milestone strengthened DOKU’s regional footprint and enabled the company to deliver seamless, reliable, and locally tailored payment solutions to businesses across Southeast Asia.

***

## Accept Payments

### No-Integration Products

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Payment Link</strong></td><td><p>Create a link that you can use to collect payments<br></p><p><a href="/pages/lVNJzWvjnghExfZC1X3x">Learn more →</a></p></td><td><a href="/files/p9j5N5m45zzcpQ3OxLFM">/files/p9j5N5m45zzcpQ3OxLFM</a></td><td><a href="/pages/lVNJzWvjnghExfZC1X3x">/pages/lVNJzWvjnghExfZC1X3x</a></td></tr><tr><td><strong>Digital Catalog</strong></td><td><p>Create an online catalog to showcase your products<br></p><p><a href="/pages/tDAJiETusjMaYEArx6z9">Learn more →</a></p></td><td><a href="/files/huiAemQftqfMczMvHQDQ">/files/huiAemQftqfMczMvHQDQ</a></td><td><a href="/pages/tDAJiETusjMaYEArx6z9">/pages/tDAJiETusjMaYEArx6z9</a></td></tr><tr><td><strong>QRIS</strong></td><td><p>Create a static or dynamic QR code to collect payments<br></p><p><a href="/pages/efJG2TzOrz6lSQFEBY9V">Learn more →</a></p></td><td><a href="/files/KyLjLZcd8awkvvTsbFJK">/files/KyLjLZcd8awkvvTsbFJK</a></td><td><a href="/pages/efJG2TzOrz6lSQFEBY9V">/pages/efJG2TzOrz6lSQFEBY9V</a></td></tr><tr><td><strong>Customer Static VA</strong></td><td><p>Reusable virtual account number assigned to a customer that can be used for multiple payments<br></p><p><a href="/pages/Y7tcKpvRfebyCtZ0Cjt1">Learn more →</a></p></td><td></td><td><a href="/pages/Y7tcKpvRfebyCtZ0Cjt1">/pages/Y7tcKpvRfebyCtZ0Cjt1</a></td></tr></tbody></table>

### Subscription and Billing

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>FlexiBill</strong></td><td><p>Collect recurring payments and track repeat customers for subscriptions and invoices<br></p><p><a href="#subscription-and-billing">Learn more →</a></p></td><td></td><td><a href="/pages/2wxVvpnkZm1vcBmTLdl7">/pages/2wxVvpnkZm1vcBmTLdl7</a></td></tr><tr><td><strong>PayChat</strong></td><td><p>An end-to-end service system for purchasing/paying for goods or services via WhatsApp (WA)<br></p><p><a href="/pages/hM1MfSL5n7Pbh5LJBjBs">Learn more →</a></p></td><td><a href="/files/CNPoSHjnEZ0pkNzsG7kA">/files/CNPoSHjnEZ0pkNzsG7kA</a></td><td><a href="/pages/hM1MfSL5n7Pbh5LJBjBs">/pages/hM1MfSL5n7Pbh5LJBjBs</a></td></tr></tbody></table>

### Web/Mobile Integration

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><strong>DOKU Checkout</strong></td><td>Customizable DOKU-hosted checkout page that can be embed on your website</td><td><a href="/pages/Xt9Sb9VzggMdzyXEHU7Y">/pages/Xt9Sb9VzggMdzyXEHU7Y</a></td><td><a href="/files/VA5z3RhwiP5hD9J2rlbk">/files/VA5z3RhwiP5hD9J2rlbk</a></td></tr><tr><td><strong>Direct API</strong></td><td>Integrate payment methods using your own custom payment page and branding </td><td><a href="/pages/6xrMxCsnqCLZjFK6HBFr">/pages/6xrMxCsnqCLZjFK6HBFr</a></td><td><a href="/files/0y9qaBv2ZIHlLOvbXkbb">/files/0y9qaBv2ZIHlLOvbXkbb</a></td></tr><tr><td><strong>e-Commerce and Plugins</strong></td><td>Set up your online business through third-party platforms or plugins</td><td><a href="/pages/EP5oADKpAPwaQjf3rgo4">/pages/EP5oADKpAPwaQjf3rgo4</a></td><td><a href="/files/ng75zpGHr0ffYUnL7MdZ">/files/ng75zpGHr0ffYUnL7MdZ</a></td></tr><tr><td><strong>SDKs and Libraries</strong></td><td>Minimize effort of integration with libraries containing various popular programming languages and development kits<br></td><td><a href="/pages/7G8v7JITnf2c5irkGmRM">/pages/7G8v7JITnf2c5irkGmRM</a></td><td><a href="/files/9bnSCt6uzFozG03jki6c">/files/9bnSCt6uzFozG03jki6c</a></td></tr><tr><td><strong>DOKU MCP Server</strong></td><td>Integrate DOKU’s payment APIs for payment processing and transaction management with AI-powered tools</td><td><a href="/pages/RwXQY2b29Gb2P3hlhGss">/pages/RwXQY2b29Gb2P3hlhGss</a></td><td><a href="/files/g4Tk0RpN5uii7yeCSndK">/files/g4Tk0RpN5uii7yeCSndK</a></td></tr></tbody></table>

***

## Payouts

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Domestic Payouts (Disbursement)</strong></td><td>Transfer funds to any local bank account in Indonesia with minimum effort</td><td><p></p><p><a href="/pages/QM1PZlBZ85O6BzjujjxS">Learn more →</a></p></td><td><a href="/pages/QM1PZlBZ85O6BzjujjxS">/pages/QM1PZlBZ85O6BzjujjxS</a></td><td><a href="/files/958FKUN5ZtF6ciRJ3KlE">/files/958FKUN5ZtF6ciRJ3KlE</a></td></tr><tr><td><strong>Cash Out</strong></td><td>Cash pickup at more than 40,000 convenience stores spread across Indonesia</td><td><p></p><p><a href="/pages/hywQc8eaiD7Vx1mf150B">Learn more →</a></p></td><td><a href="/pages/hywQc8eaiD7Vx1mf150B">/pages/hywQc8eaiD7Vx1mf150B</a></td><td><a href="/files/ukwbLmnD8O2YBqMPBl5l">/files/ukwbLmnD8O2YBqMPBl5l</a></td></tr></tbody></table>

***

## Wallet as a Service

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Embedded Wallet</strong></td><td><p>Elevate your app with built-in electronic wallet, minimizing development expenses</p><p><br><a href="/pages/M3C24qoaiKEv55YiaCyx">Learn more →</a></p></td><td><a href="/files/7FNEpEfg8UxTPylgwhgy">/files/7FNEpEfg8UxTPylgwhgy</a></td><td><a href="/pages/M3C24qoaiKEv55YiaCyx">/pages/M3C24qoaiKEv55YiaCyx</a></td></tr><tr><td><strong>Sub-Account</strong></td><td><p>Improve money flow with seamless account and balance features</p><p></p><p><a href="/pages/fL0P1Q4WHhGwloZ3Fbbi">Learn more →</a></p></td><td><a href="/files/yxkpNEzhFA43FoBV0vBu">/files/yxkpNEzhFA43FoBV0vBu</a></td><td><a href="/pages/fL0P1Q4WHhGwloZ3Fbbi">/pages/fL0P1Q4WHhGwloZ3Fbbi</a></td></tr></tbody></table>

***

## Mobile Apps

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Juragan DOKU</strong></td><td>Accept payments by generating payment links or showcasing products through a catalog via a mobile app</td><td><p></p><p><a href="/pages/1tyfw9zOqiStOmNLfMyv">Learn more →</a></p></td><td><a href="/files/V4RfbA3BFI2BX1rylZtB">/files/V4RfbA3BFI2BX1rylZtB</a></td><td><a href="/pages/1tyfw9zOqiStOmNLfMyv">/pages/1tyfw9zOqiStOmNLfMyv</a></td></tr><tr><td><strong>DOKU e-Wallet</strong></td><td>Make online or offline payments, pay various bills, and withdraw cash using a digital wallet</td><td><p></p><p><a href="/pages/zoqdlHU0DnjtKOVUNNc1">Learn more →</a></p></td><td><a href="/files/by5uPnCaHY9t8btux3jm">/files/by5uPnCaHY9t8btux3jm</a></td><td><a href="/pages/zoqdlHU0DnjtKOVUNNc1">/pages/zoqdlHU0DnjtKOVUNNc1</a></td></tr></tbody></table>

{% hint style="info" %}

### Need Help?

Visit [Contact Support](/miscellaneous/contact-support) for more information.
{% endhint %}


# Create Account

Sign up and gain access to DOKU Dashboard

## Create a Business Account&#x20;

In this section, you will learn how to become a DOKU merchant by creating your first DOKU Business Account. The following is a step-by-step guide on how you could create a Business Account:

1. Visit DOKU Dashboard Registration page
   * Indonesia and other countries: <https://dashboard.doku.com/bo/register>
   * Malaysia: <https://dashboard.doku.com/bo/register?country=MY>
2. Fill the registration form by entering your full name, business name, business email address, phone number, and password
3. Review and agree to the **Terms and Conditions** and **Privacy Policy**, then submit the form
4. Verify your account by entering the OTP that was sent to your email address
5. Once your OTP is authenticated, your Business Account will be successfully created. You can proceed to activate your Business account by following the next guide [here](/get-started/activate-business).&#x20;

{% hint style="info" %}
If you have an existing Business Account, you can skip this process by creating a User Account. [Learn more](/get-started/manage-business/manage-team-members)
{% endhint %}

<div data-full-width="false"><figure><img src="/files/82xRDNuFfgxou1l1divl" alt=""><figcaption><p>DOKU Dashboard Registration Page</p></figcaption></figure></div>

***

## Create a Sandbox Account

While DOKU Business Account is used to accept real payments in the live environment, DOKU Sandbox Account is a demo account that you can use to simulate payments in the testing environment. If you are looking to test payments and explore our services and products, the following is a step-by-step guide on how you could create a DOKU Sandbox Account:

1. Visit DOKU Sandbox Registration page
   * Indonesia and other countries: <https://sandbox.doku.com/bo/sandbox-registration>
   * Malaysia: <https://sandbox.doku.com/bo/sandbox-registration?country=MY>
2. Fill the registration form by entering your full name, business name, business email address, and password
3. Review and agree to the **Terms and Conditions** and **Privacy Policy**, then submit the form
4. DOKU Sandbox Account has been successfully created. You can proceed to log in to [DOKU Sandbox](https://sandbox.doku.com/bo/login?utm_source=docs) using the credentials you provided in the registration form.

<figure><img src="/files/qWuvQUgFHmrzPcip94yb" alt=""><figcaption><p>DOKU Sandbox Registration Page</p></figcaption></figure>

***

## FAQ

<details>

<summary>I did not receive any OTP during registration. What should I do?</summary>

You can troubleshoot this issue in two ways:&#x20;

1. The OTP may not have been successfully sent due to an invalid email address entered during registration. Please ensure that the email address you provided is correct and capable of receiving emails from outside your organization.
2. The email might be inside your Spam folder. Please ensure that you have checked your Spam folder.

</details>

<details>

<summary>What is the difference between a User Account and a Business Account?</summary>

A **Business Account** represents your company as a whole, while a **User Account** represents an individual member within your company. A single Business Account can have multiple User Accounts, depending on how many members are needed to manage your business operations.

</details>

<details>

<summary>Can I sign up for multiple Business Accounts with the same company and user data?</summary>

Yes, although this is not recommended, as our risk screening team may not approve your account verification. If your company operates multiple lines of business and you wish to accept payments for each, you can register a single Business Account and enable the Multi-brand feature. You can learn more about Multi-brand on [Manage Multiple Brands](/get-started/manage-business/manage-multiple-brands).

</details>

{% hint style="info" %}
If your questions cannot be found here, please visit [Contact Support](/miscellaneous/contact-support#general-faqs) for further information.
{% endhint %}


# Activate Business

Have your Business Account verified to unlock all DOKU Dashboard features


# 🇮🇩 Business Account

Have your Indonesian Business Account verified to unlock all DOKU Dashboard features

Once you have created your DOKU Business Account, you can proceed by activating your Business Account. To activate your account, you will need to complete the following four stages:

1. [Choose Business Account Type](#id-1.-choose-business-account-type)
2. [Submit Business Data](#id-2.-submit-business-data)
3. [Upload Documents](#id-3.-upload-documents)
4. [Wait for Account Verification](#id-4.-wait-for-account-verification)

***

## 1. Choose Business Account Type

There are 3 different types of Business Account you can choose from. You are free to choose the Business Account that best suits your business.

<table><thead><tr><th width="193.99993896484375">Business Account Type</th><th width="285">Definition</th><th>Examples</th></tr></thead><tbody><tr><td>Corporate</td><td>Merchants with a legal business entity in Indonesia</td><td><p>Legal Entities:</p><ol><li>BLU (Badan Layanan Umum)</li><li>BUMN (Badan Usaha Milik Negara)</li><li>CV (Commanditaire Venootschap)</li><li>Cooperation</li><li>Firm</li><li>Foundation</li><li>Legal Entity Association</li><li>PP (Persekutuan Perdata)</li><li>PT (Perseroan Terbatas)</li><li>PTN-BH (Perguruan Tinggi Negeri Badan Hukum)</li><li>UD (Usaha Dagang)</li></ol></td></tr><tr><td>International</td><td>Merchants with a legal business entity outside Indonesia</td><td><p>Legal Entities:</p><ol><li>Private Limited</li><li>Limited Liability Company (LLC)</li><li>Limited Liability Partnership (LLP)</li><li>Public Limited Company (PLC)</li><li>Limited (Ltd.)</li><li>Incorporated</li><li>Corporation</li><li>Sdn. Bhd. (Sendirian Berhad)</li><li>Sdn. (Sendirian)</li><li>Bhd. (Berhad)</li></ol></td></tr><tr><td>Personal</td><td>Merchants without any legal business entity</td><td>Home-based businesses, Food Stalls, Online Sellers, Freelancers, and Content Creators</td></tr></tbody></table>

***

## 2. Submit Business Data

Each type of Business Account has different business data requirements.

<table><thead><tr><th width="159">Data Type</th><th width="193">Corporate</th><th width="191">International </th><th>Personal</th></tr></thead><tbody><tr><td>User Data</td><td><p>- Full Name</p><p>- Email Address</p><p>- Password</p><p>- Phone Number</p></td><td><p>- Full Name</p><p>- Email Address</p><p>- Password</p><p>- Phone Number</p></td><td><p>- Full Name</p><p>- Email Address</p><p>- Password</p><p>- Phone Number</p></td></tr><tr><td>Owner’s Data</td><td><p>- Full Name</p><p>- Nationality</p><p>- Position</p><p>- Phone Number</p><p>- Email Address</p><p>- ID Card Number (KTP for Indonesian, KITAS for non-Indonesian)</p><p>- Passport</p></td><td><p>- Full Name</p><p>- Nationality</p><p>- Position</p><p>- Phone Number</p><p>- Email Address</p><p>- Passport</p></td><td><p>- Full Name</p><p>- Nationality</p><p>- Phone Number</p><p>- Email Address</p><p>- ID Card Number (KTP)<br>- Self Photo with ID Card</p></td></tr><tr><td>Business Data</td><td><p>- Business Entity Name</p><p>- Business Type (e.g., PT, CV, PO, etc.)</p><p>- Phone Number</p><p>- Business Postal Code and Address</p><p>- Business Location Photo</p></td><td><p>- Business Entity Name</p><p>- Business Type (e.g., Pvt Ltd)</p><p>- Phone Number</p><p>- Business Postal Code and Address</p><p>- Business Location Photo</p></td><td>N/A</td></tr><tr><td>Brand Data</td><td><p>- Brand Name</p><p>- Line of Business</p><p>- Description</p><p>- Estimated TPT and TPV</p><p>- Social Media Links (Website, Facebook, Twitter, Instagram, App Store/Play Store)<br>- Brand Logo</p></td><td><p>- Brand Name</p><p>- Line of Business</p><p>- Description</p><p>- Estimated TPT and TPV</p><p>- Social Media Links (Website, Facebook, Twitter, Instagram, App Store/Play Store)</p><p>- Brand Logo</p></td><td><p>- Brand Name</p><p>- Line of Business</p><p>- Description</p><p>- Estimated TPT and TPV</p><p>- Social Media Links (Website, Facebook, Twitter, Instagram, App Store/Play Store)</p><p>- Brand Logo</p></td></tr><tr><td>Bank Account Data</td><td><p>- Bank Name</p><p>- Bank Account Name</p><p>- Bank Account Number</p><p>- Currency</p></td><td><p>- Bank Name</p><p>- Bank Account Name</p><p>- Bank Account Number</p><p>- Bank Country</p><p>- Currency</p><p>- SWIFT Code</p></td><td><p>- Bank Name</p><p>- Bank Account Name</p><p>- Bank Account Number</p><p>- Currency</p></td></tr></tbody></table>

### Business/Brand Proof Guidelines

Submitting proof of your business’s legitimacy is essential to build trust and ensure compliance with DOKU’s policies. Proof of legitimacy can take one of three forms: **location**, **activity**, or **product/service**. Below are the details for each type of proof:

| Business Proof Type          | Photo Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Location (Place of Business) | Exterior or interior photos of the establishment (for instance: storefront, office, factory, or workstations) with a board that shows the company's name or logo                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| Activity                     | <p>Evidence showcasing business activities and engagements in forms such as:</p><ol><li>Photos or videos of highlighting the business activities with the owner(s) or employee(s) of the company.</li><li>Events, press releases, media coverage, or articles featuring the company.</li><li>Marketing campaigns, advertisements, social media posts or content showcasing customer engagement and community support initiatives.</li><li>Order invoices, client testimonials, financial statements, transaction records, or sales reports validating business activity and revenue.</li><li>Contracts or agreements with clients, suppliers, or partners confirming ongoing business relationships.</li><li>Awards, recognitions, or industry certifications showcasing business achievements and credibility.</li></ol> |
| Product or Service           | <p>Evidence of products/services that are offered by the company in forms such as:</p><ol><li>High-quality images showcasing product/service variations and features.</li><li>Screenshots or videos demonstrating the functionality of digital platforms, websites, software, or apps.</li><li>Online store screenshots displaying product listings with prices and descriptions.</li><li>Portfolio or catalog highlighting offered products or services.</li><li>Transaction flow diagram illustrating transactions (either offline or online) of the product/service .</li></ol>                                                                                                                                                                                                                                        |

#### Additional Requirements for Specified Lines of Business

1. **Agriculture**

* Requirements: Photos of the farm, crops, equipment or agricultural activities.

2. **Charity**

* Requirements: Photos of the charity events, beneficiaries, and/or registration certificate.

3. **Digital and Game**

* Requirements: Screenshots of the platform, game interface, and/or user engagement.

4. **Education**

* Requirements: Photos of the educational institution, classrooms, students (if applicable), educational activites, and/or accreditation certificate.

5. **Event Organizer**

* Requirements: Photos of events organized, venues, and promotional materials.

6. **Hospitality**

* Requirements: Photos of the establishment (hotel, resort, hostel), rooms, and amenities.

7. **Logistics**

* Requirements: Photos of the warehouse, transportation fleet, and storage facilities.

8. **Manufacture**

* Requirements: Photos of the manufacturing facility, production line, and products.

9. **Transportation**

* Requirements: Photos of the vehicles, transportation hubs, and logistics operations.

10. **Airlines**

* Requirements: Photos of the aircraft fleet, boarding areas, ticketing counters, and airline operations.

#### Submission Tips

* It is not mandatory to submit photos for each proof type (location, activity, and product/service), but it is highly advisable as it expedites the verification process.
* Location photos cannot be sourced from Google Maps.
* Photos must be clear, well-lit, and sharply focused.
* Screenshots containing text, images, and any details must be visible and readable.
* The submitted proof should directly substantiate the legitimacy of your business within the specified category, aligning with the data provided during business account setup.

{% hint style="info" %}
All data submitted to DOKU are encrypted and protected. Please check our [Privacy Policy](https://dashboard.doku.com/doku-agreement/privacy-policy?utm_source=docs) for the full details.
{% endhint %}

***

## 3. Upload Documents

You are required to upload your legal documents to complete the onboarding process. The document requirements vary for each Business Account type.

{% tabs %}
{% tab title="Corporate" %}

* NIB (*Nomor Induk Berusaha*)
* *Akta Pendirian dan Perubahan Perusahaan*
* *SK Kemenkumham dan Perubahan Perusahaan*
* Business Proof Photo (Location/Activity/Product)
* NPWP (*Nomor Pokok Wajib Pajak*)
* ID Card of Director (KTP for Indonesian, KITAS for non-Indonesian)

For certain line of business, there will be an additional document(s) that is required to be submitted as such:

| Business Line                                                                      | Additional Required Documents                                                                                                                                                                                                       |
| ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Capital Market                                                                     | BAPPEBTI License (*Badan Pengawas Perdagangan Berjangka Komoditi*)                                                                                                                                                                  |
| Charity                                                                            | Surat Izin PUB (Pengumpulan Uang dan Barang) from the Ministry of Social Affairs                                                                                                                                                    |
| Education                                                                          | License from the Ministry of Education, Culture, Research, and Technology or from any Education Authorities                                                                                                                         |
| Event Organizer                                                                    | <ul><li><em>Surat Izin</em> from BOPI (<em>Badan Olahraga Professional Indonesia</em>)</li><li><em>Surat Izin Keramaian</em> from the Police Department</li></ul>                                                                   |
| Food and Beverage                                                                  | <ul><li><em>Surat Izin</em> from BPOM (<em>Badan Pengawas Obat dan Makanan</em>)</li><li>Halal License from MUI (<em>Majelis Ulama Indonesia</em>)</li></ul>                                                                        |
| Peer-to-peer Lending                                                               | <ul><li><em>Tanda Daftar Penyelenggara Sistem Elektronik</em> from the Ministry of Communication and Information Technology</li><li>License from OJK (<em>Otoritas Jasa Keuangan</em>)</li></ul>                                    |
| Pharmacy                                                                           | <ul><li><em>Surat Izin</em> BPOM (<em>Badan Pengawas Obat dan Makanan</em>)</li><li><em>Surat Izin Edar Alat Kesehatan</em> from the Ministry of Health Department</li></ul>                                                        |
| Retail                                                                             | License from an Authorized Distributor                                                                                                                                                                                              |
| Travel Agency                                                                      | <ul><li><em>Sertifikat Keanggotaan Asita</em> (Association of the Indonesian Tours and Travel Agencies)</li><li><em>Surat Izin Penyelenggaraan</em> <em>Ibadah Haji dan Umrah</em> from the Ministry of Religious Affairs</li></ul> |
| <p></p><p>Internet Service Provider (ISP), Telecommunication, or Cloud Hosting</p> | Certificate from KOMINFO                                                                                                                                                                                                            |
| <p></p><p>Cigarettes, e-Cigarettes, and Tobacco Products</p>                       | License from Directorate General of Customs and Excise (Bea Cukai)                                                                                                                                                                  |
| Payment Service Provider (PSP) or PJSP                                             | License from Bank Indonesia                                                                                                                                                                                                         |
| {% endtab %}                                                                       |                                                                                                                                                                                                                                     |

{% tab title="International" %}

* Certificate of Incorporation / Business Registration Document
* Shareholder Structure
* Business License (related to the line of business)
* Bank Reference Letter
* Passport of Director
  {% endtab %}

{% tab title="Personal" %}

* ID Card (KTP)
* Self Photo with ID Card
* Business Proof Photo (Location/Activity/Product)
  {% endtab %}
  {% endtabs %}

Before you upload and submit the documents for account registration, please ensure that the documents are

1. Readable, not blurry;
2. Uncensored;
3. Not expired; and
4. Owned by the company, the business entity name has to be written on the document.

{% hint style="warning" %}

### Document Limitations

* Formats: PDF, JPG, JPEG, PNG
* Size: Maximum of 15 MB
  {% endhint %}

***

## 4. Wait for Account Verification

Once you have successfully uploaded all of the required documents, your Business Account will undergo a verification process that may take up to 48 hours.\
\
You'll be notified via email once the process is complete. If no notification is received after this period of time, please [submit a ticket](https://help.doku.com/en/support/tickets/new) to DOKU Care or send an email to <care@doku.com>.

{% hint style="success" %}

### Tips

If your Business Account type is Personal or Corporate, you don't need to wait for your Business Account to be verified to start accepting payments. However, we will only process the funds settlement after your business account has been verified.
{% endhint %}

***

## FAQ

<details>

<summary>My file/document is failed to be uploaded. What should I do?</summary>

Your file might fail to be uploaded due to the following reasons:

1. The file format is invalid
2. The file size is too big
3. The file is corrupted

Please ensure that your documents follow the below rules.

1. The file format is either PDF, PNG, JPG, or JPEG
2. The file size less than 15 MB
3. The file can be accessed and opened

</details>

<details>

<summary>When can I start accepting payments?</summary>

Your ability to accept payments depends on your Business Account type:

* For **Personal** and **Corporate** Merchant&#x73;**:**\
  You can start accepting payments **immediately after activating your Business Account** — verification is **not required** to begin receiving payments.\
  However, please note that funds will only be settled to your bank account after your Business Account has been successfully verified.
* For **International** Merchants:\
  You must **complete the verification process** before you can start accepting payments.

</details>

<details>

<summary>What payment methods are immediately available after completing Business Account registration?</summary>

The following payment methods are immediately available upon completing Business Account registration:&#x20;

1. Virtual Account
2. Alfa Group
3. Indomaret
4. DOKU e-Wallet
5. Akulaku

</details>

<details>

<summary>Is there a limit to how many payments I can receive if my account is not verified?</summary>

Yes, unverified Business Accounts have restrictions on both the number of transactions and the total transaction volume.

For Corporate accounts:\
You can receive up to 5 transactions with a maximum total volume of IDR 10,000,000.

For Personal accounts:\
You can receive up to 5 transactions with a maximum total volume of IDR 1,000,000.

</details>

<details>

<summary>Can I update my Business Account data after submitting account registration?</summary>

Yes, you are free to update your business data after you have completed the business account registration, especially if your data or documents have been rejected. However, please note that the verification process of your Business Account may take longer than usual as we would have to review your data from the beginning.

</details>

<details>

<summary>Can my Business Account verification be rejected?</summary>

Your Business Account verification may be rejected due to incomplete documents or invalid data. During this time, DOKU will be unable to process your settlement funds in order to comply with Anti-Money Laundering and Countering the Financing of Terrorism (AML/CTF) regulations. DOKU will continue to hold your settlement funds until you are able to submit all the required documents and data.

</details>

<details>

<summary>Is there a limit to how many payments I can receive if my account is not verified?</summary>

Yes, unverified Business Accounts have restrictions on both the number of transactions and the total transaction volume.

* For **Personal** Merchant&#x73;**:**\
  You can receive up to **5 transactions** with a maximum total volume of **IDR 1,000,000**.
* For **Corporate** Merchants:\
  You can receive up to **5 transactions** with a maximum total volume of **IDR 10,000,000**.
* For **International** Merchants:\
  You must **complete the verification process** before you can start accepting payments.

Please complete the account verification process via your DOKU Dashboard to lift these limits and continue receiving payments without interruption,

</details>

<details>

<summary>My Business Account verification is rejected after I started accepting payments. What should I do?</summary>

If your business account verification was rejected due to incomplete documents or invalid data, DOKU will be unable to process your settlement funds in order to comply with Anti-Money Laundering and Countering the Financing of Terrorism (AML/CTF) regulations.&#x20;

DOKU will continue to hold your settlement funds until you are able to submit all the required documents and data. Please refer to [Activate Business](/get-started/activate-business#business-brand-proof-guidelines) to avoid your business account verification getting rejected.

If you fail to provide all the required documents requested by our team, you may choose to refund the completed transactions to your customers by [submitting a support ticket ](https://help.doku.com/en/support/tickets/new)or sending an email to <care@doku.com>. Please make sure to include the following details:

* Your Brand ID
* Invoice Number
* Transaction Date
* Transaction Amount
* Customer's Bank Account
* Amount to be Refunded (Full/Partial)

</details>

<details>

<summary>Why is my Business Account status still "Under Review"?</summary>

The "Under Review" status means that your Business Account has not yet been verified because it is still undergoing our internal verification and risk screening process.

If your account has been under review for an extended period, it may be due to one of the following reasons:

* Your submitted business data or documents were **rejected**.
* You have **not updated or resubmitted** the required information.

To check and update/resubmit your **business data**, follow these steps:

1. Log in to the [DOKU Dashboard](https://dashboard.doku.com/bo/account/business?utm_source=docs)
2. From the side navigation bar, select **Settings**
3. Under the **Account** section, click **Business Info**
4. On the **Business Info** page, you can review and update your company data, business representative details, and brand information.

> A yellow banner will appear under each data tab if your data is still being verified. Click the **"View Data Changes"** button to see any pending updates. A red banner will appear under each data tab if your data has been rejected. You can view the rejected notes and the specific data that needs to be revised.

To check or update/resubmit your **business documents**, follow these steps:

1. Log in to the [DOKU Dashboard](https://dashboard.doku.com/bo/account/business?utm_source=docs)
2. From the side navigation bar, select **Settings**
3. Under the **Account** section, click **Documents**
4. On the **Documents** page, you can upload the latest legal documents required for your business account.

</details>

<details>

<summary>How to check whether my Business Account has been verified?</summary>

You can check your Business Account status by following the steps below:

1. Log in to DOKU Dashboard
2. On the Dashboard page, your current Business Account (Merchant) status will be displayed at the top

"Under Review" means your Business Account has not passed verification yet. If your Business Account has been approved, the status section will no longer appear on the Dashboard.

</details>

<details>

<summary>What should I do after my Business Account has been verified?</summary>

Once your DOKU Business Account has been verified, you will be able to access all features and tools available in the DOKU Dashboard, including accepting payments and processing fund settlements.

</details>

<details>

<summary>Can I get a personal assistance from DOKU Team to help me with my Business Account activation?</summary>

Absolutely. Please fill and submit the following [form](https://www.doku.com/en-US/contact-sales?utm_source=docs). Our team will reach out to you and provide a free consultation to help you successfully activate your Business Account. We will also assist in answering any questions you may have about our products and services.

</details>

<details>

<summary>Can I still proceed with the Business Account registration and activation even if I don't have a website or social media links?</summary>

Yes, you can still register a business account without a website or social media presence. However, please note that the risk of rejection is higher, as the lack of online presence may raise concerns during the account verification process. You are recommended to support your application by providing additional documents or proof that your business is legitimate and operational.

</details>

<details>

<summary>Can I change my Business Account type?</summary>

No, it is not possible to change Business Account type. Once an account is created as Personal, Corporate, or International, it cannot be converted to another type. This means you cannot switch from Personal to Corporate or International, or vice versa. If you require a different account type, you will need to register a new account with the appropriate classification.

</details>

<details>

<summary>How many web domains can be used under one Business Account?</summary>

One Business Account can be used for multiple web domains, as long as all domains are listed in your business data and are related to the registered **business legal entity**.

</details>

<details>

<summary>Can a non-Indonesian register 'Personal' Business Account?</summary>

No. Personal Business Accounts are only available for Indonesian citizens. Non-Indonesian users can register only under a Corporate or International Business Account type.

</details>


# 🇲🇾 Business Account

Have your Malaysian Business Account verified to unlock all DOKU Dashboard features

Once you have created your DOKU Business Account, you can proceed by activating your Business Account. To activate your account, you will need to complete the following four stages:

1. [Choose a Package](#id-1.-choose-a-package)
2. [Submit Business Data](#id-2.-submit-business-data)
3. [Upload Documents](#id-3.-upload-document)
4. [Wait for Account Verification](#id-4.-wait-for-an-account-verification)

## 1. Choose a Package

There are 2 types of package available in our service:

| Features         | Starter                          | Advance                          |
| ---------------- | -------------------------------- | -------------------------------- |
| Payment Methods  | ![](/files/TyelgRUBkOaAdN5h9dee) | ![](/files/XBwRXzU83y7Xp0mo18cU) |
| Payment Features | Basic                            | Advanced                         |
| Cost (Yearly)    | RM 199                           | RM 349                           |

After selecting the package, complete payment to proceed.

## 2. Submit Business Data

Each type of Business Account has different business data requirements.

<table><thead><tr><th width="159">Data Type</th><th>Corporate</th></tr></thead><tbody><tr><td>User Data</td><td><p>- Full Name</p><p>- Email Address</p><p>- Password</p><p>- Phone Number</p></td></tr><tr><td>Owner’s Data</td><td><p>- Full Name</p><p>- Nationality</p><p>- Position</p><p>- Phone Number</p><p>- Email Address</p><p>- ID Card (Front and Back)</p><p>- Passport</p></td></tr><tr><td>Business Data</td><td><p>- Business Entity Name</p><p>- Business Type (e.g., Sdn, Bhd, Sdn Bhd, etc.)</p><p>- Phone Number</p><p>- Business Postal Code and Address</p><p>- Business Location Photo<br>- Tax Identification Number (TIN)<br>- Sales and Service Tax (SST) Number</p></td></tr><tr><td>Brand Data</td><td><p>- Brand Name</p><p>- Line of Business</p><p>- Description</p><p>- Estimated TPT and TPV</p><p>- Social Media Links (Website, Facebook, Twitter, Instagram, App Store/Play Store)<br>- Brand Logo</p></td></tr><tr><td>Bank Account Data</td><td><p>- Bank Name</p><p>- Bank Account Name</p><p>- Bank Account Number</p><p>- Currency</p></td></tr></tbody></table>

### Business/Brand Proof Guidelines

Submitting proof of your business’s legitimacy is essential to build trust and ensure compliance with DOKU’s policies. Proof of legitimacy can take one of three forms: **location**, **activity**, or **product/service**. Below are the details for each type of proof:

| Business Proof Type          | Photo Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Location (Place of Business) | Exterior or interior photos of the establishment (for instance: storefront, office, factory, or workstations) with a board that shows the company's name or logo                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| Activity                     | <p>Evidence showcasing business activities and engagements in forms such as:</p><ol><li>Photos or videos of highlighting the business activities with the owner(s) or employee(s) of the company.</li><li>Events, press releases, media coverage, or articles featuring the company.</li><li>Marketing campaigns, advertisements, social media posts or content showcasing customer engagement and community support initiatives.</li><li>Order invoices, client testimonials, financial statements, transaction records, or sales reports validating business activity and revenue.</li><li>Contracts or agreements with clients, suppliers, or partners confirming ongoing business relationships.</li><li>Awards, recognitions, or industry certifications showcasing business achievements and credibility.</li></ol> |
| Product or Service           | <p>Evidence of products/services that are offered by the company in forms such as:</p><ol><li>High-quality images showcasing product/service variations and features.</li><li>Screenshots or videos demonstrating the functionality of digital platforms, websites, software, or apps.</li><li>Online store screenshots displaying product listings with prices and descriptions.</li><li>Portfolio or catalog highlighting offered products or services.</li><li>Transaction flow diagram illustrating transactions (either offline or online) of the product/service .</li></ol>                                                                                                                                                                                                                                        |

#### Additional Requirements for Specified Lines of Business

1. **Agriculture**

* Requirements: Photos of the farm, crops, equipment or agricultural activities.

2. **Charity**

* Requirements: Photos of the charity events, beneficiaries, and/or registration certificate.

3. **Digital and Game**

* Requirements: Screenshots of the platform, game interface, and/or user engagement.

4. **Education**

* Requirements: Photos of the educational institution, classrooms, students (if applicable), educational activites, and/or accreditation certificate.

5. **Event Organizer**

* Requirements: Photos of events organized, venues, and promotional materials.

6. **Hospitality**

* Requirements: Photos of the establishment (hotel, resort, hostel), rooms, and amenities.

7. **Logistics**

* Requirements: Photos of the warehouse, transportation fleet, and storage facilities.

8. **Manufacture**

* Requirements: Photos of the manufacturing facility, production line, and products.

9. **Transportation**

* Requirements: Photos of the vehicles, transportation hubs, and logistics operations.

10. **Airlines**

* Requirements: Photos of the aircraft fleet, boarding areas, ticketing counters, and airline operations.

#### Submission Tips

* It is not mandatory to submit photos for each proof type (location, activity, and product/service), but it is highly advisable as it expedites the verification process.
* Location photos cannot be sourced from Google Maps.
* Photos must be clear, well-lit, and sharply focused.
* Screenshots containing text, images, and any details must be visible and readable.
* The submitted proof should directly substantiate the legitimacy of your business within the specified category, aligning with the data provided during business account setup.

{% hint style="info" %}
All data submitted to DOKU are encrypted and protected. Please check our [Privacy Policy](https://dashboard.doku.com/doku-agreement/privacy-policy?utm_source=docs) for the full details.
{% endhint %}

***

## 3. Upload Documents

&#x20;You are required to upload your legal documents to complete the onboarding process. The following are the mandatory documents:

* Business Ordinance / Registration Certificate
* Latest 3-Month Bank Statement
* Utility Bill

### Additional Documents by Legal Entity Type

The required documents vary according to the legal entity type of the applicant:

| Legal Entity Type                                                                                                                                                                                                                                 | Required Documents |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ |
| <ol><li>Business In Sabah and Serawak (BSS)</li><li>Sendirian (Sdn)</li><li>Berhad (Bhd)</li><li>Sendirian Berhad (Sdn Bhd)</li><li>Limited Liability Partnership (LLP)</li><li>Partnership</li><li>Sole Proprietorship</li></ol><p> </p><p> </p> | SSM                |
| Society or Organization                                                                                                                                                                                                                           | Organization Chart |

### Additional Documents by Line of Business

For certain line of business, there will be an additional document(s) that is required to be submitted as such:

| Business Line     | Additional Required Documents                                    |
| ----------------- | ---------------------------------------------------------------- |
| Food and Beverage | Kementerian Kesihatan Malaysia (KKM) Registration                |
| Pharmacy          | Kementerian Kesihatan Malaysia (KKM) Registration                |
| Medical Device    | Medical Device Registration (MDA) License                        |
| Travel Agent      | Malaysia's Ministry of Tourism, Arts and Culture (MOTAC) License |
| Charity           | Audited Financial Statement                                      |
| Retail            | License from an Authorized Distributor                           |

Before you upload and submit the documents for account registration, please ensure that the documents are

1. Readable, not blurry;
2. Uncensored;
3. Not expired; and
4. Owned by the company, the business entity name has to be written on the document.

{% hint style="warning" %}

### Document Limitations

* Formats: PDF, JPG, JPEG, PNG
* Size: Maximum of 15 MB
  {% endhint %}

***

## 4. Wait for Account Verification

Once you have successfully uploaded all of the required documents, your Business Account will undergo a verification process that may take up to 48 hours.\
\
You'll be notified via email once the process is complete. If no notification is received after this period of time, please [submit a ticket](https://help.doku.com/en/support/tickets/new) to DOKU Care or send an email to <help@senangpay.my>.

***

## FAQ

<details>

<summary>My file/document is failed to be uploaded. What should I do?</summary>

Your file might fail to be uploaded due to the following reasons:

1. The file format is invalid
2. The file size is too big
3. The file is corrupted

Please ensure that your documents follow the below rules.

1. The file format is either PDF, PNG, JPG, or JPEG
2. The file size less than 15 MB
3. The file can be accessed and opened

</details>

<details>

<summary>Can I update my Business Account data after submitting account registration?</summary>

Yes, you are free to update your business data after you have completed the business account registration, especially if your data or documents have been rejected. However, please note that the verification process of your Business Account may take longer than usual as we would have to review your data from the beginning.

</details>

<details>

<summary>Can my Business Account verification be rejected?</summary>

Your Business Account verification may be rejected due to incomplete documents or invalid data. During this time, DOKU will be unable to process your settlement funds in order to comply with Anti-Money Laundering and Countering the Financing of Terrorism (AML/CTF) regulations. DOKU will continue to hold your settlement funds until you are able to submit all the required documents and data.

</details>

<details>

<summary>How to check whether my Business Account has been verified?</summary>

You can check your Business Account status by following the steps below:

1. Log in to DOKU Dashboard
2. On the Dashboard page, your current Business Account (Merchant) status will be displayed at the top

"Under Review" means your Business Account has not passed verification yet. If your Business Account has been approved, the status section will no longer appear on the Dashboard.

</details>

<details>

<summary>How many web domains can be used under one Business Account?</summary>

One Business Account can be used for multiple web domains, as long as all domains are listed in your business data and are related to the registered **business legal entity**.

</details>


# Manage Business

Use DOKU Dashboard to manage your Business Account

## Overview&#x20;

DOKU Dashboard is an online management portal that enables businesses to manage and monitor their DOKU-powered payment operations in one place. Through the dashboard, businesses can view real-time transaction data, manage payouts and refunds, track revenue, handle customer disputes, configure payment methods, generate financial reports, and set up integrations or API keys. There are plenty of ways you can manage your Business Account using DOKU Dashboard.

1. [Manage Team Members](/get-started/manage-business/manage-team-members)
2. [Activate Services](/get-started/manage-business/activate-services)
3. [Manage Payment Methods](/get-started/manage-business/manage-payment-methods)
4. [Set Up Integration](/get-started/manage-business/set-up-integration)
5. [Manage Finances](/get-started/manage-business/manage-finances)
6. [Manage Reports](/get-started/manage-business/manage-reports)
7. [Manage Operations](/get-started/manage-business/manage-operations)
8. [Manage Customers](/get-started/manage-business/manage-customers)
9. [Set Up a Promo](/get-started/manage-business/set-up-a-promo)
10. [Manage Multiple Brands](/get-started/manage-business/manage-multiple-brands)
11. [Update Business Data](/get-started/manage-business/update-business-data)

***

## Account Information

You may find plenty of information in DOKU Dashboard that you may not be familiar with. In this section, you will learn all the information that is shown in DOKU Dashboard.

### My User Account Information

Your User Account Information can be found on **User Profile** page.

* **Name** - The registered name of your User Account.
* **Email ID** - The registered email address of your User Account.
* **Phone Number** - The registered phone number of your User Account.
* **Account Password** - The password that is used to register for your User Account.

### My Business Account Information

Your Business Account Information can be found on **Business Info** page.

* **Business ID (Business Client ID)** - The registered ID of your Business Account. (e.g. BSN-1234-123456789)
* **Business Name -** The registered name of your Business entity (e.g., DOKU Private Limited)

### My Brand Information

Your Brand Account Information can be found on **Business Info** page.

* **Brand ID** **(Client ID)** - The registered ID of your Brand Account. (e.g. BRN/MCH/OCO-1234-123456789)
* **Brand Name** - The registered name of your Brand (e.g., DOKU)&#x20;
* **Secret Key** - The private credentials of your Brand Account that is used for technical integration.
* **DOKU Public Key** - The public credentials of your Brand Account by DOKU that is used for technical integration.
* **Merchant Public Key** - The public credentials of your Brand Account by the Merchant that is used for technical integration.

***

## FAQ

<details>

<summary>Can I give dashboard access to my team?</summary>

Yes, you can invite as many team members as you like to access your DOKU Dashboard. Please follow the the guide on [Manage Team Members](/get-started/manage-business/manage-team-members#invite-team-members).

</details>

<details>

<summary>What is the access level and permission for each role in team management?</summary>

Access level and permission for each role can be found on [Manage Team Members](/get-started/manage-business/manage-team-members#member-roles-and-permissions).&#x20;

As an Admin, you can edit the roles of your team members.&#x20;

</details>

<details>

<summary>How to switch the language of the dashboard?</summary>

DOKU Dashboard supports two languages: Indonesian and English. You can switch between the two languages by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Click the ellipsis icon **( ⋮ )** next to your name
3. Switch the language based on your preference.

</details>

<details>

<summary>Why are some of the menus missing from the side navigation bar?</summary>

Menus may be missing due to the access level of your user account. Please ensure that your team member is assigned to the correct role to be able to access the appropriate pages.

Visit [Manage Team Members](/get-started/manage-business/manage-team-members#member-roles-and-permissions) to learn the access level for each role.

</details>

<details>

<summary>Why are the button names in the documentation different from those on my dashboard?</summary>

This discrepancy may be due to one of the following reasons:

* Your dashboard is set to a different language than the one used in the documentation.
* The documentation is currently being updated. If you notice outdated information in our documentation, please let us know so we can ensure it is corrected.

</details>

<details>

<summary>How do I check my Business Account type?</summary>

You can check your Business Account Type directly from your DOKU Dashboard by following these steps:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/account/business?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Account** section, select **Business Info**
4. Under the **Company** tab, check the field that is displayed next to your **Company Name**. The account type is shown based on what appears in that field:
   1. Personal: Personal or *Perseorangan*
   2. Corporate: PT, BLU, BUMN, CV, Cooperation, Firm, Foundation, Legal Entity Association, PP, or PTN-BH, UD.
   3. International: Pte Ltd, Pvt Ltd, Corporation, Inc., LLC, LLP, Ltd, PLC, Sdn, Sdn Bhd, or Bhd.

</details>


# Manage Team Members

Add, remove, or assign roles to team members

Once you have a DOKU Business Account, you can start inviting other members in your business to gain access to the DOKU Dashboard. Inviting users to your Business Account will create a User Account for them without having to create a new Business Account again.&#x20;

***

## Invite Team Members

You can add users to your team and assign them roles to limit their access to the dashboard. You can invite as many team members as you like to access your DOKU Dashboard by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Team & Security** section, select **Team Management**
4. **Team Management** page will appear, then click **Invite Team Member**
5. Enter your team member's email address and assign the appropriate role
6. Complete Google reCAPTCHA, then click **SAVE**.

{% hint style="info" %}
You can only invite other team members as an Admin.
{% endhint %}

***

## Edit or Remove Team Member

Besides inviting team members, you are also enabled to edit their role or remove them from your team. You can remove or change the role of your team member by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Team & Security** section, select **Team Management**
4. **Team Management** page will appear where you can see the list of all your team members<br>
5. Click trash icon to remove team member, or click pencil icon to change the role of your team member.&#x20;

{% hint style="info" %}
You can only remove or change the role of other team members as an Admin. Admin can remove or change the role of other Admins.
{% endhint %}

***

## Member Roles and Permissions

The following table is a list of all the roles and their permissions:

<table><thead><tr><th width="255">Permissions</th><th width="83">Admin</th><th width="74">IT</th><th width="94">Finance</th><th width="99.666748046875">Operation</th><th>Customer Service</th></tr></thead><tbody><tr><td>Create and manage Payment Link</td><td>✅</td><td>✅</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>Create and manage Items on Digital Catalog</td><td>✅</td><td>✅</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>View, export, and manage transaction report</td><td>✅</td><td>✅</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>View reconciled transactions and settlement</td><td>✅</td><td>❌</td><td>✅</td><td>❌</td><td>❌</td></tr><tr><td>View checkout orders</td><td>✅</td><td>✅</td><td>❌</td><td>✅</td><td>❌</td></tr><tr><td>View and update business information</td><td>✅</td><td>❌</td><td>❌</td><td>❌</td><td>❌</td></tr><tr><td>Manage service and payment methods</td><td>✅</td><td>❌</td><td>❌</td><td>❌</td><td>❌</td></tr><tr><td>Invite, edit, and remove team member</td><td>✅</td><td>❌</td><td>❌</td><td>❌</td><td>❌</td></tr><tr><td>Access to notification center</td><td>✅</td><td>✅</td><td>❌</td><td>✅</td><td>❌</td></tr><tr><td>Configure payment settings</td><td>✅</td><td>✅</td><td>❌</td><td>✅</td><td>❌</td></tr><tr><td>Configure checkout page </td><td>✅</td><td>✅</td><td>❌</td><td>✅</td><td>❌</td></tr></tbody></table>

***

## FAQ

<details>

<summary>Can I monitor the activities of my team members?</summary>

You can monitor the activities of your team members by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Team and Security** section, select **Activity Logs**
4. **Activity Logs** page will appear, where you will be able to see all the activities of your team members in the DOKU Dashboard

</details>


# Activate Services

Enable all services offered by DOKU

You can activate services and products offered by DOKU for your business by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Account** section, select **Service**
4. On **Service** page, click **ADD SERVICE**
5. Select the service you would like to activate
6. Click **ACTIVATE**.

Certain payment methods can only be activated with the assistance of our Sales team. You may contact our Sales team by filling the following [form](https://www.doku.com/en-US/contact-sales?utm_source=docs).

***

## FAQ

<details>

<summary>Why are some of the services disabled?</summary>

Certain services require you to sign an agreement with DOKU to be enabled. If you wish to enable those services, please contact our Sales team by filling the following [form](https://www.doku.com/en-US/contact-sales?utm_source=docs).

</details>

<details>

<summary>Why is my service status still updating?</summary>

Certain services require specific business criteria to be met before they can be activated. If your service status is still updating, please contact your account manager or sales representative for further assistance. Otherwise, please contact our Sales team by filling the following [form](https://www.doku.com/en-US/contact-sales?utm_source=docs).

</details>


# Manage Payment Methods

Configure and customize available payment options for your customers

## Activate Payment Methods

You can activate payment methods for your business by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Account** section, select **Service**
4. On **Service** page, click **ADD SERVICE**
5. Select the payment method you would like to activate
6. Click **ACTIVATE**.

Notes:

* Some payment methods can be activated instantly.
* Others may require approval from our **Risk Screening Team** before they become active.
* Certain payment methods may also require **credential registration** before activation is complete.
* Certain payment methods may be seen as disabled, because it can only be activated with the assistance of our Sales team. You may contact our Sales team by filling the following [form](https://www.doku.com/en-US/contact-sales?utm_source=docs).

***

## Configure Payment Methods

In this section, you will learn how to configure features for each payment method along with specific configuration steps, such as setting up your merchant prefix name for Bank Transfers and country BIN for Cards, and ensuring each payment method is tailored to your business needs.&#x20;

### Cards

#### Country BIN

You can filter which countries are allowed for card transactions to be processed by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Payment Configuration** section, select **Cards**
4. **Cards Settings** page will appear, then click **Payment Configuration** tab
5. **Payment Configuration** tab will appear. Under Country & BIN Filtering section, select either of the two options: (1) Allow all BIN countries or (2) Allow partial countries. Selecting partial countries will require you to select the country of your choice\
   ![](/files/OQOq4RbmQecxiK50TuOy)
6. Click **Save** to submit.

***

### Bank Transfer (Virtual Account)

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only
{% endhint %}

#### Merchant Prefix Name

You can configure your prefix name for Virtual Account by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Payment Configuration** section, select **Virtual Account**
4. **Virtual Account Settings** page will appear, then click **Configure** based on the Virtual Account of your choice
5. A pop-up box will appear where you can add or change the prefix of the Virtual Account to be your business/brand name, then click **SAVE**.

***

### QRIS

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only
{% endhint %}

#### QRIS Credentials

QRIS credentials consist of

1. QRIS Client ID,
2. QRIS Shared Key,
3. QRIS Client Secret,
4. MPAN, and
5. NMID.&#x20;

If QRIS payment method has been activated, you can retrieve these credentials by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Accept Payments** section, select **Checkout Appearance**
4. **Checkout Page Configuration** page will appear, then click **QRIS Credential Settings** tab where you will find the QRIS credentials for your business
5. Click **Save** to save your configuration

#### Static QRIS

You can view your static QRIS image by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Account** section, select **Service**
4. Search for **QRIS** under the Service list, and then select **See Details**
5. A pop-up box will appear where your static QRIS image can be seen.\
   ![](/files/8OEUxIV8euaN19N30tca)

{% hint style="info" %}
The static QRIS image becomes available once the payment method is activated.
{% endhint %}

***

## FAQ

<details>

<summary>What payment methods are available by default?</summary>

The following payment methods are immediately available upon completing Business Account registration:&#x20;

1. Virtual Account
2. Alfa Group
3. Indomaret
4. DOKU e-Wallet
5. Akulaku

</details>

<details>

<summary>How to activate credit card installments?</summary>

Simply follow the guide on [#activate-payment-methods](#activate-payment-methods "mention"), and ensure that Installments are selected. Please note that **Cards** payment method with **Regular Sale** type must be activated before you can activate **Installments**.

</details>

<details>

<summary>Why are some payment methods disabled in the payment method activation list?</summary>

Certain payment methods require you to sign an agreement with DOKU to be enabled. If you wish to enable those payment methods, please contact our Sales team by filling the following [form](https://www.doku.com/en-US/contact-sales?utm_source=docs).

</details>

<details>

<summary>Why are some payment methods missing from the payment method activation list?</summary>

The availability of payment methods depends on your account type. Certain payment methods are only accessible to specific account types. For example, merchants with a Personal account type will not see or be able to activate Virtual Account BCA.

If you wish to access additional payment methods, consider registering a new account with a different account type that meets the eligibility requirements.

</details>

<details>

<summary>Why is my payment method status still "Updating"?</summary>

First, please ensure that your Business Account has been verified. Payment method activation will not move forward until your Business Account passes verification and risk screening. If your Business Account is not yet verified, the application for any payment method will remain pending.

The "Updating" status may also indicate that the activation process is still in progress. Certain payment methods require merchant ID or credentials from the respective bank/payment channel in order for the payment method to be activated. If your payment method status is still "Updating" (pending), the bank/payment channel is still in the process of creating your merchant ID or credentials.&#x20;

Please contact your account manager or sales representative for assistance.

</details>

<details>

<summary>How long do I need to wait for the payment method to be activated?</summary>

Some payment methods can be activated instantly. Some payment methods require merchant ID or credentials from the respective bank/payment channel in order for the payment method to be activated. This process may take 7-14 working days depending on the payment method.

Please contact your account manager or sales representative for assistance.&#x20;

</details>

<details>

<summary>How to check whether my payment method has been activated?</summary>

You will be notified via email once any payment method has been activated.&#x20;

You may also check the payment method status by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings**
3. Under **Business Info** section, select **Service**
4. **Service** page will appear where you may find all the list of payment methods that you have activated. If your payment method has been activated, the status will be **ACTIVE**

</details>

<details>

<summary>How to check the transaction fees charged for each payment method?</summary>

You can check the fee that is charged to you for each payment method that you activated by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. Under **Finance Settings** tab, select **Fee Scheme**
4. **Fee Scheme** page will appear where you can check the fee that is charged to you based on each payment method that you activated.

</details>

<details>

<summary>What is the difference between DGPC, MGPC, and DIPC in Virtual Account?</summary>

| **Feature Type**                       | **Description**                                                                                                                                                                                                                         |
| -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| DOKU Generated Payment Code (DGPC)     | <p>Merchant sends a payment request to DOKU, and DOKU will create the unique payment code and send it to Merchant.<br>This is suitable for an e-commerce business model.</p>                                                            |
| Merchant Generated Payment Code (MGPC) | <p>Merchant generates their own payment code and forwards the payment code to DOKU.<br><br>This is suitable for a top-up payment.</p>                                                                                                   |
| Direct Inquiry Payment Code (DIPC)     | <p>Merchant first registers the payment code, and DOKU will forward the inquiry request to Merchant when a customer chooses to make a payment.<br><br>This is suitable for a top-up payment, especially for static Virtual Account.</p> |

The default feature type for any payment method is DGPC. When another feature is activated, you will have to choose which feature will you be using for a particular transaction. You can have more than one feature activated for 1 payment method, but a transaction cannot be generated with 2 features at the same time.

If you would like to use MGPC or DIPC, you may contact your account manager or [submit a ticket](https://help.doku.com/en/support/tickets/new) to DOKU Care to activate the feature.

</details>

<details>

<summary>Can I change the merchant name that is shown on the receipt for Convenience Store (Alfa Group and Indomaret) payment methods?</summary>

Yes, you can request to change the merchant name shown on receipts for convenience store payments. Please contact your dedicated account manager for this request. If you do not have an account manager, please fill and submit [this](https://www.doku.com/en-US/contact-sales?utm_source=docs) form.&#x20;

</details>

<details>

<summary>How to activate QRIS in the staging environment (DOKU Sandbox)?</summary>

QRIS is not supported in DOKU Sandbox. Consequently, QRIS credentials cannot be used in sandbox, and no QRIS transaction simulator is available. Registration, issuance, and usage of QRIS credentials are strictly limited to the live (production) environment.

</details>

<details>

<summary>My QRIS activation was rejected due to an incorrect MCC. What should I do?</summary>

If your QRIS activation is rejected due to an incorrect Merchant Category Code (MCC), it means the submitted business classification does not match your business type based on the verification conducted by PTEN.

In this case, please [submit a support ticket](https://help.doku.com/en/support/tickets/new) or send an email to <care@doku.com> with your account details. Our team will review your information and assist you in resubmitting the QRIS activation using the correct Merchant Category Code (MCC) to ensure a smoother approval process.

</details>

<details>

<summary>What is the difference between On-us and Off-us in Card payments?</summary>

In Card payments, **On-us** and **Off-us** refer to whether the card-issuing bank and the acquiring bank (payment processor) are the same or different:

* **On-us**: The cardholder’s bank and the acquiring bank are the **same**. Transactions are typically processed faster and may have lower fees or higher approval rates.
* **Off-us**: The cardholder’s bank and the acquiring bank are **different**. These transactions are routed through interbank networks (e.g., Visa, Mastercard), and may take slightly longer to process or incur additional fees.

This distinction is important for settlement timelines, transaction costs, and approval rates in card payment processing.

</details>


# Set Up Integration

Connect your system with DOKU using API keys and integration tools

## Select Integration Method

DOKU offers flexible integration options to suit your business needs, whether you are building a custom checkout, using an existing platform, or developing mobile apps. You can integrate with DOKU by choosing one of the following methods:

1. [DOKU Checkout](/accept-payments/integration-tools/doku-checkout)
2. [Direct API](/accept-payments/integration-tools/direct-api)
3. [e-Commerce and Plugins](/accept-payments/integration-tools/e-commerce-and-plugins)
4. [SDKs and Libraries](/accept-payments/integration-tools/sdks-and-libraries)

| Method                                                                              | Setup Time | Customization Level | Best For                                                     |
| ----------------------------------------------------------------------------------- | ---------- | ------------------- | ------------------------------------------------------------ |
| [DOKU Checkout](/accept-payments/integration-tools/doku-checkout)                   | Fast       | Medium              | Merchants seeking a secure and optimized checkout experience |
| [Direct API](/accept-payments/integration-tools/direct-api)                         | Moderate   | High                | Merchants requiring full control over the payment flow       |
| [e-Commerce and Plugins](/accept-payments/integration-tools/e-commerce-and-plugins) | Very Fast  | Medium              | Shopify, WooCommerce, and Adobe Commerce (Magento)           |
| [SDKs and Libraries](/accept-payments/integration-tools/sdks-and-libraries)         | Fast       | High                | Mobile apps and web integrations                             |

{% hint style="info" %}
If you are unsure which method is best for your use case, we recommend starting with DOKU Checkout for faster setup, then migrating to Direct API as your needs become more advanced.
{% endhint %}

***

## API Keys

**API Keys** are secure credentials used to authenticate and authorize a merchant's system to access and interact with DOKU’s payment processing services. API Keys consist of the following components:

1. **Client ID**: A unique identifier for the merchant (e.g., `BRN-0239-1736742088036`)
2. **Secret Key**: A credential used for payment and general authentication. Options to reveal or copy the full key are available and will require users to input an OTP sent by DOKU to the user's email
3. **Public Keys**: Cryptographic keys used to authenticate or encrypt transactions
   1. **DOKU Public Key**: A security key provided by DOKU, used to prove that messages (such as payment confirmations) are genuinely from DOKU
   2. **Merchant Public Key**: A security key generated by the merchant, which DOKU uses to verify that requests are legitimately from the merchant
4. **Token URL:** Configuration details necessary to integrate your system with SNAP (Standard Open API Pembayaran Indonesia), the standardized payment API system in Indonesia. This setting is only required when using Bank Transfer (Virtual Account) or Convenience Store payment methods with the DIPC feature enabled

***

## View Secret Key

{% @supademo/embed demoId="cm99q1h1e1pl0pxcbvk90lnn7" url="<https://app.supademo.com/demo/cm99q1h1e1pl0pxcbvk90lnn7>" %}

You can view both your Secret Key and Client ID by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Account** section, select **API Keys**
4. **API Keys** page will appear, then click **Reveal Key**
5. A pop-up will appear, then enter the 6-digit verification code (OTP) sent to your email
6. Upon successful verification, your Secret Key will be visible for 30 seconds. Click **Copy Secret Key** if needed.

{% hint style="info" %}
This guide also applies to retrieving the Client ID and Secret Key on DOKU Sandbox (staging environment).
{% endhint %}

***

## Regenerate Secret Key

Regenerating your Secret Key is a best practice to enhance security, especially in cases of potential compromise or employee turnover. It is recommended to regularly rotate your Secret Key every few months to minimize risks. You can choose to regenerate your Secret Key either **immediately** or **at a scheduled time**.

### Immediate Regeneration

{% @supademo/embed demoId="cm99rlr1g1qrcpxcbt5jm99kg" url="<https://app.supademo.com/demo/cm99rlr1g1qrcpxcbt5jm99kg>" %}

You can regenerate your Secret Key and implement it immediately by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Account** section, select **API Keys**
4. **API Keys** page will appear, then click **Regenerate Secret Key**
5. A pop-up will appear, then enter the 6-digit verification code (OTP) sent to your email
6. Upon successful verification, your newly generated Secret Key will be displayed
7. Review and agree to the Terms and Conditions for Secret Key regeneration, then click **Save**.

{% hint style="danger" %}
Immediate Regeneration of Secret Key will disrupt active transactions.
{% endhint %}

### Scheduled Generation

{% @supademo/embed demoId="cm99skepu1rq4pxcbj633c0lh" url="<https://app.supademo.com/demo/cm99skepu1rq4pxcbj633c0lh>" %}

You can regenerate your secret key and implement it later by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Account** section, select **API Keys**
4. **API Keys** page will appear, then click **Regenerate Secret Key**
5. A pop-up will appear, then enter the 6-digit verification code (OTP) sent to your email
6. Upon successful verification, your newly generated Secret Key will be displayed
7. Under the **Implementation Time** field, select **Specific Time**
8. Choose your desired date and time for the implementation
9. Review and agree to the Terms and Conditions for Secret Key regeneration, then click **Save**.

***

## View Public Keys

{% @supademo/embed demoId="cm99tcrxp1spppxcbmx0jlw0w" url="<https://app.supademo.com/demo/cm99tcrxp1spppxcbmx0jlw0w>" %}

You can view your public keys by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Account** section, select **API Keys**
4. **API Keys** page will appear, then click **Reveal Key** next to the desired key (DOKU Public Key or Merchant Public Key).

***

## FAQ

<details>

<summary>What is my Client ID and Secret Key?</summary>

You can find your Client ID and Secret Key by following the guide on [#view-secret-key](#view-secret-key "mention").

</details>

<details>

<summary>What will happen to the old Secret Key after I regenerated new keys?</summary>

Once a new Secret Key is generated, the previous key becomes invalid and can no longer be used for authentication. You must update your systems with the newly generated key immediately after regeneration.

</details>

<details>

<summary>Will regenerating new Secret Keys disrupt active transactions?</summary>

Yes, if your systems continue using the old key after regeneration, it may cause transaction failures. To minimize disruption:

* Test the new Secret Key in a staging environment before production deployment.
* Plan key updates during low-traffic periods.
* If available, implement dual-key handling during the transition.

</details>

<details>

<summary>How often can I regenerate the Secret Key?</summary>

There is no strict limit; however, avoid unnecessary key rotations to prevent potential integration disruptions.

</details>

<details>

<summary>Can I recover a previous Secret Key?</summary>

No. Once a Secret Key is regenerated, the previous key is permanently invalid. Always store backups securely if necessary.

</details>

<details>

<summary>Is there a delay before the new Secret Key becomes active?</summary>

Activation is typically immediate, although some systems may briefly cache the old key. If issues occur, retry after 1–2 minutes.

</details>

<details>

<summary>After regenerating a new Secret Key, do I need to update the Public Key as well?</summary>

No. Public keys are separate and are not affected by Secret Key regeneration.

</details>

<details>

<summary>How should I store the new Secret Key?</summary>

Never store the Secret Key in plaintext (e.g., emails, documents, or unencrypted files). Recommended practices include:

* Using password managers (e.g., Bitwarden).
* Using cloud-based secret management tools (e.g., AWS Secrets Manager).
* Storing it as an environment variable on secure servers.

</details>

<details>

<summary>What should I do if I lose the new Secret Key?</summary>

Immediately regenerate a new Secret Key and update all affected integrations accordingly.

</details>

<details>

<summary>Can I track if someone changes the Secret Key?</summary>

Yes. You can track Secret Key changes by checking Activity Logs. For detailed steps, please follow the guide on [Manage Operations](/get-started/manage-business/manage-operations#monitor-activity-logs).

</details>


# Webhook / Payment Notification

## 🇮🇩 Business Account

Set your payment notification URL to receive real-time updates via API webhook (callback). The following guides show how to set up the payment notification URL for each payment method:

1. [#bank-transfer-virtual-account](#bank-transfer-virtual-account "mention")
2. [#cards](#cards "mention")
3. [#e-wallet](#e-wallet "mention")
4. [#convenience-store](#convenience-store "mention")
5. [#paylater](#paylater "mention")
6. [#direct-debit](#direct-debit "mention")
7. [#digital-banking](#digital-banking "mention")
8. [#qris](#qris "mention")

### Bank Transfer (Virtual Account)

You can configure your payment notification URL for Bank Transfer (Virtual Account) payment methods by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Payment Settings** section, select **Virtual Account**
4. **Virtual Account Settings** page will appear, then click **Configure** based on the Virtual Account of your choice
5. A pop-up box will appear where you can set your payment notification URL, then click **SAVE**.

***

### Cards

You can configure your payment notification URL for Cards payment method by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Payment Settings** section, select **Cards**
4. **Cards Settings** page will appear, then click **Payment Configuration** tab
5. **Payment Configuration** tab will appear, click **Edit** and insert your payment notification URL in the field, then click **Submit** to save the changes.\
   ![](/files/zqsuHMSpzXwfEjl2Qc7L)

***

### e-Wallet

You can configure your payment notification URL for e-Wallet payment methods by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Payment Settings** section, select **e-Wallet**
4. **e-Wallet Settings** page will appear, then click **CONFIGURE** based on the payment method of your choice
5. A pop-up box will appear where you can set your payment notification URL, then click **SAVE**.

***

### Convenience Store

You can configure your payment notification URL for Convenience Store payment methods by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Payment Settings** section, select **Convenience Store**
4. **Convenience Store Settings** page will appear, then click **CONFIGURE** based on the payment method of your choice
5. A pop-up box will appear where you can set your payment notification URL, then click **SAVE**.

***

### PayLater

You can configure your payment notification URL for PayLater payment methods by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Payment Settings** section, select **PayLater**
4. **Paylater Settings** page will appear, then click **CONFIGURE** based on the payment method of your choice
5. A pop-up box will appear where you can set your payment notification URL, then click **SAVE**.

***

### Direct Debit

You can configure your payment notification URL for Direct Debit payment methods by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Payment Settings** section, select **Direct Debit**
4. **Direct Debit Settings** page will appear, then click **CONFIGURE** based on the payment method of your choice
5. A pop-up box will appear where you can set your payment notification URL, then click **SAVE**.

***

### Digital Banking

You can configure your payment notification URL for Digital Banking payment methods by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Payment Settings** section, select **Digital Banking**
4. **Digital Banking Settings** page will appear, then click **CONFIGURE** based on the payment method of your choice
5. A pop-up box will appear where you can set your payment notification URL, then click **SAVE**.

***

### QRIS

You can configure your payment notification URL for QRIS by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Payment Settings** section, select **QR Payment**
4. **QRIS Settings** page will appear, then click **Edit** based on the payment method of your choice
5. A pop-up box will appear where you can set your payment notification URL, then click **Submit**.

***

## 🇲🇾 Business Account

**Webhook** is a page that allows DOKU to send real-time payment status updates directly to a merchant’s system. Instead of continuously checking the transaction status, merchants can rely on automatic callbacks triggered whenever a payment event occurs.

This feature improves operational efficiency and reduces integration complexity for merchants by:

* Providing instant payment confirmation to merchant systems.
* Supporting automation such as order fulfillment, digital product delivery, or status updates to customers.

With this feature, merchants only need to configure one endpoint URL, and DOKU will forward payment events for the selected payment channels to that endpoint. The system ensures that merchants stay informed about their transaction lifecycle without additional effort.

Set your payment notification URL to receive real-time updates via API webhook (callback). The following guides show how to set up the payment notification URL for each payment method:

Merchants can:

* Create a new webhook.
* Edit an existing webhook.
* View webhook details.
* Delete a webhook.

This section provides a step-by-step guide on how merchants can create, edit, view, and delete webhooks through the DOKU Dashboard.

### Create Webhook

You can configure your payment notification (webhook) by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Payment Settings** section, select **Webhook**
4. After the Webhook page is displayed, you can create your webhook directly from this screen.

<figure><img src="/files/VWRL81WA4twZQH5rBXJu" alt=""><figcaption></figcaption></figure>

5. And then, fill in the description, add the endpoint URL, and choose your preferred payment channel. Make sure to fill in all mandatory fields.

<figure><img src="/files/d3eirOfsgz0O4xBgSY4X" alt=""><figcaption></figcaption></figure>

6. Use Cancel button to go back to the previous page, or select Create button to apply your webhook settings. Payment channel cannot be reused once assigned to an existing webhook, and merchant can select one or more payment channels for receiving notifications.

<figure><img src="/files/3Am8oYJ88ZQ5BYMIdNaY" alt=""><figcaption></figcaption></figure>

7. After the success message is displayed, your webhook setup is complete and ready to use.

<figure><img src="/files/GwTglNNC8ZrRPCgqiD7g" alt=""><figcaption></figcaption></figure>

### View Webhook

After the webhook is created, you can view its details by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Payment Settings** section, select **Webhook**
4. After the webhook is created, you can view its details by selecting the *View Details* option from the hamburger menu.

<figure><img src="/files/Hb4S67Jrk54J3mtjfnqP" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/n35fA6biHzvH7TSohE9H" alt=""><figcaption></figcaption></figure>

### **Edit Webhook**

After the webhook is created, you can edit its details by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Payment Settings** section, select **Webhook**
4. Choose Edit from the hamburger menu.

<figure><img src="/files/Hb4S67Jrk54J3mtjfnqP" alt=""><figcaption></figcaption></figure>

5. You can then update the necessary information and click Save to apply the changes.

<figure><img src="/files/TZ19E3vC3xFY2yBB3ZXd" alt=""><figcaption></figcaption></figure>

### Delete Webhook

You can delete a webhook by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Payment Settings** section, select **Webhook**
4. Choose Delete from the hamburger menu.

<figure><img src="/files/Hb4S67Jrk54J3mtjfnqP" alt=""><figcaption></figcaption></figure>

5. A confirmation pop-up will appear. To proceed, click Delete, and the webhook will be removed.

<figure><img src="/files/TWjngGNiylX2LfbSrRkR" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
If webhook is deleted, inactive, or no URL configured notification is not sent.
{% endhint %}


# Simulate Transactions

DOKU Sandbox allows you to simulate transactions before going live and accepting real payments. The simulator works for all integration methods, as well as no-integration products such as Payment Link and Digital Catalog. You can simulate transactions with DOKU Sandbox by following the steps below:

1. Log in to [DOKU Sandbox](https://sandbox.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Payment Settings** section, select **Simulator**
4. **Simulator** page will appear, select the payment method you wish to test, matching the one chosen during checkout.
5. Click **Simulate**.

A simulation guide specific to each payment method will be displayed on the page.


# Manage Finances

Manage settlement bank accounts and fund disbursements

## Add a New Bank Account

You can add a new bank account for settlement by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu&#x20;
3. **Settings** page will appear. Under **Account** section, select **Bank Account**
4. **Bank Account** page will appear, then click **Add**
5. Select whether to add a **Local** (Indonesian) or **Overseas** bank account\
   ![](https://s3.amazonaws.com/cdn.freshdesk.com/data/helpdesk/attachments/production/66055958587/original/b4z-ejYp1LAlGjSvl0e4sR3kVoUe3rfZ5A.png?1686857555)![](https://s3.amazonaws.com/cdn.freshdesk.com/data/helpdesk/attachments/production/66055958821/original/zWKV7xjMKYyrnYisw8q-LXDc8fDhTYANbA.png?1686857697)
6. Complete the bank account information and click **Submit** for verification.

Your newly registered bank account for settlement will be reviewed. The verification process may take up to 1×24 hours.

***

## Edit a Bank Account

If your bank account verification has been rejected and you would like to update your bank details, you can revise your settlement bank account information by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu&#x20;
3. **Settings** page will appear. Under **Account** section, select **Bank Account**
4. **Bank Account** page will appear. Find the bank account you want to edit, then click the ellipsis **( ⋮ )** icon on the far right and select **Edit**
5. Adjust the necessary details and click **Submit** for verification.

Your newly updated settlement bank account will be reviewed. The verification process may take up to 1×24 hours.

***

## Select a Bank Account for Settlement

You can check and select your settlement bank account by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Finance Settings** section, select **Settlement**
4. **Settlement Settings** page will appear. Under the **Settlement Destination** section, verify the displayed bank account. If you wish to change it, click **Edit** and select **Edit Settlement Configuration**
5. Select the preferred bank account for settlement and click **Save**.

The next settlement batch will be directed to the newly selected bank account. These same steps apply whether you're selecting a bank account for the first time or **changing an existing settlement bank account**. The updated account will be used for the next settlement batch.

***

## Check Payment Method Fees

You can check the fee that is charged to you for each payment method that you activated by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. Under **Finance Settings** tab, select **Fee Scheme**
4. **Fee Scheme** page will appear, where you can view the applicable fees for each activated payment method.

***

## Check Transaction Fees

You can check the fee that is charged to you for each payment method that you activated by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Reports** from the menu, then choose **Reconciled Transactions**&#x20;
3. **Reconciled Transactions** page will appear, and you will find the transaction fee under **Total Fee (IDR)** column.

***

## FAQ

<details>

<summary>Why is my bank account rejected?</summary>

There are several reasons why your bank account may be rejected. Common reasons include:

* Mismatch of account name – The name on the bank account must match the registered business or the owner's name.
* Incorrect or incomplete bank details – For example, an invalid account number or missing branch code.
* Unsupported bank – The provided bank may not be supported for settlements.
* Suspicious or high-risk account activity – Our risk team may flag accounts associated with unusual or inconsistent transaction behavior.

</details>

<details>

<summary>Can the settlement bank account name be different from my name or my business name?</summary>

The eligibility of the settlement bank account name depends on the type of your Business Account:

* For **Personal** Merchants:\
  The bank account name used for settlement **must match the account holder's name**.
* For **Corporate** and **International** Merchants:\
  The bank account name must match either:
  * The **registered business name**, or
  * The name of a listed **business owner** (as stated in your official business registration documents).

If the bank account name differs from both, you may submit a **fund transfer authorization letter** for consideration. However, please note that such requests are **subject to approval** and are **highly likely to be rejected** due to compliance policies.

</details>

<details>

<summary>How to withdraw balance of settlement funds to my bank account?</summary>

All settlement disbursements are processed automatically to your registered bank account after a successful transaction. Therefore, you are not required to manually withdraw your settlement funds. If you would like to check the status of your transaction and when the funds will be transferred to you, you may do so by following the steps below:

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs)
2. Navigate to **Reports** > **Reconciled Transactions**
3. Review the **Settlement Schedule** field.

</details>

<details>

<summary>What is the settlement time?</summary>

Settlement periods vary based on the payment method used for the transaction. Visit [Settlement Time](/accept-payments/finance-and-settlement/settlement-time) for detailed schedules.&#x20;

</details>

<details>

<summary>Can I add more than one settlement bank account?</summary>

Yes, you can register as many settlement bank accounts as needed. However, please ensure that the account holder’s name matches your registered business name. Bank accounts with mismatched names will be rejected during the verification process.

</details>

<details>

<summary>Can I set a different settlement bank account for a specific payment method?</summary>

Yes, you can do so by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Finance Settings** section, select **Settlement**
4. **Settlement Settings** page will appear, then check under **Payment Method** section and click **Edit** for the payment method that you want to configure bank account settlement
5. Select a bank account for settlement, then click **Submit**

The next settlement batch for that payment method will be directed to the newly selected bank account.

</details>

<details>

<summary>Can DOKU settle funds in other currencies besides IDR?</summary>

As an Indonesian Payment Service Provider company with a [disbursement and remittance license](https://docs.doku.com/~/changes/210/security/licenses), DOKU supports settlement of funds in IDR, USD, SGD, and MYR.

Please note that settlement in other currencies besides IDR will not follow the regular settlement schedule.

</details>

<details>

<summary>I did not receive my settlement funds. What should I do?</summary>

Your transactions might not be settled due to the following reasons:

* Your business account has not been verified
* The bank account that you registered is invalid
* The settlement bank account has not been set

To check if your transaction is being held:

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs)
2. Navigate to **Reports** > **Reconciled Transactions**
3. Review the **Settlement Schedule** field. If the status is **Hold**, it means your transaction is pending settlement.

If you find your transaction to be on **Hold** despite your business account and bank account have been verified, please [submit a support ticket](https://help.doku.com/en/support/tickets/new).

</details>

<details>

<summary>Why are my transaction funds settled to the wrong bank account?</summary>

Incorrect settlement may occur if the wrong bank account has been selected during configuration. You can resolve this by verifying that the correct bank account is selected under the Settlement Settings. Visit [#select-a-bank-account-for-settlement](#select-a-bank-account-for-settlement "mention") for instructions.

</details>

<details>

<summary>Can I split the settlement to multiple bank accounts?</summary>

Yes, DOKU supports settlement splitting into multiple bank accounts.\
However, all accounts must be located within the same country group:

* You can split settlement between two or more local bank accounts (within Indonesia)
* You can split settlement between two or more overseas bank accounts (outside Indonesia)
* Mixing local and overseas accounts for settlement splitting is not supported

</details>

<details>

<summary>Is there a minimum settlement amount?</summary>

A minimum settlement threshold of IDR 165,000,000 is required for merchants using non-Indonesian (foreign) bank accounts. Transfer fees apply and are deducted from the settlement amount.

This policy does not apply to merchants with a local (Indonesian) bank account, who are eligible for settlement without a minimum threshold.

</details>

<details>

<summary>Can DOKU make settlements using cryptocurrency?</summary>

No, DOKU does not support settlements in cryptocurrency. DOKU supports settlement of funds in IDR, USD, SGD, and MYR.

</details>


# Custom Settlement

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only
{% endhint %}

## Split Settlement

Split Settlement is a feature designed to streamline and automate the distribution of funds among multiple stakeholders within your business ecosystem. This service ensures accurate and transparent financial transactions by allowing you to split settlements based on predefined rules.

### **Key Features**

* **Rule-based Splitting:** Define rules to automatically distribute funds among various recipients.
* **Real-time Settlements:** Enjoy the convenience of instantaneous fund transfers as transactions occur.
* **Customizable Thresholds:** Set specific criteria for splitting funds, ensuring flexibility in financial management.

### **Use Cases**

* **Marketplace Platforms:** Easily distribute payments to multiple sellers in online marketplaces.
* **Aggregator Services:** Streamline revenue sharing among service providers and partners.
* **Franchise Businesses:** Facilitate automatic revenue distribution among franchisees.

Please refer to our [API Reference](https://developers.doku.com/accept-payment/finance-and-settlement/split-settlement) on how to implement Split Settlement feature for your business account.

***

## Hold and Release

The Hold and Release feature provides you with control over payment disbursements by allowing you to temporarily hold funds and release them based on your business requirements. This feature enhances security and reduces the risk of unauthorized transactions.

### **Key Features**

* **Manual Control:** Manually review and approve transactions before funds are released.
* **Fraud Prevention:** Mitigate the risk of fraudulent activities by implementing additional verification steps.
* **Customizable Hold Periods:** Define specific time frames for holding funds based on your business needs.

### **Use Cases**

* **Risk Management:** Minimize financial risks by manually reviewing high-value transactions.
* **Fraud Prevention:** Implement additional security measures to protect against unauthorized transactions.
* **Regulatory Compliance:** Ensure compliance with industry regulations by controlling fund releases.

Please refer to our [API Reference ](https://developers.doku.com/accept-payment/finance-and-settlement/hold-and-release-settlement)on how to implement Hold and Release feature for your business account.

***

## Custom Settlement Report

Custom Settlement Report feature empowers you with comprehensive control over your financial data. Generate customized reports tailored to your specific business needs, providing insights into transaction details, fees, and settlement timelines.

### **Key Features**

* **Flexible Reporting:** Create reports based on selected parameters such as time range, transaction types, and more.
* **Export Options:** Download reports in various formats, including CSV and PDF, for seamless integration with your financial systems.
* **Transaction Details:** Gain granular insights into each transaction for enhanced financial analysis.

### **Use Cases**

* **Financial Analysis:** Analyze transaction data to make informed business decisions.
* **Accounting Integration:** Seamlessly integrate settlement data into your accounting software.
* **Regulatory Compliance:** Generate reports for compliance purposes and audits.

Please refer to our [API Reference](https://developers.doku.com/accept-payment/finance-and-settlement/custom-settlement-report) on how to implement Custom Settlement Report for your business account.


# Split Settlement

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only
{% endhint %}

Split Settlement is a feature that allows you to split the amount of the transaction into more than one settlement bank account. It's an ideal solution for merchants requiring customized settlement rules that can be used for marketplaces, platforms, franchises, as well as businesses with multiple branches.&#x20;

Split Settlement can be configured based on a percentage or a fixed amount. Split Settlement can be set up either via API or DOKU Dashboard for every successful transaction that occurred on the same day.

***

## **Key Features**

* **Rule-based Splitting:** Define rules to automatically distribute funds among various recipients.
* **Real-time Settlements:** Enjoy the convenience of instantaneous fund transfers as transactions occur.
* **Customizable Thresholds:** Set specific criteria for splitting funds, ensuring flexibility in financial management.

***

## Activate Split Settlement

You can activate split settlement by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Account** section, select **Service**
4. On **Service** page, click **ADD SERVICE**
5. A pop-up window will appear with service options. Scroll down to find **Financial Services**. Check the Split Settlement checkbox and click **Activate**
6. Ensure that the Split Settlement service appears on the **Service** page
7. Split Settlement service will have the status **UPDATING** when it is first added, and once it has been verified by DOKU, the status will change to **ACTIVE**.

***

## Configure Split Settlement

You can configure split settlement or update existing configuration to transactions using DOKU Dashboard by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Reports** from the menu, then choose **Reconciled Transactions**
3. Filter transactions with the status "Payment Success", then click search
4. Once the relevant transactions appear, locate the action table on the right side&#x20;
5. Click the "⁝" icon in the action column
6. A pop-up will appear; select "Settlement Configuration"
7. Details of the transaction and the destination bank account will be shown
8. Click "Split Transaction" in the pop-up box
9. To add more bank accounts, leave the value field empty and click "Add more bank"
10. Adjust the bank account destination and split amount as needed.&#x20;
11. Select the amount type (fixed amount or percentage) by clicking "Split by"
12. Add more bank accounts if needed. A maximum of 10 destination bank accounts are allowed
13. Ensure the following rules are adhered when values are being input for split settlement
    * If "Split by Percent" is selected, the total percentage input must not exceed 100%
    * If "Split by Fixed Amount" is selected, the total input amount must not exceed the "Total Settlement Amount" specified
14. Click "Save Configuration" to convert the transaction to split settlement. There will be an indicator that your transaction has been marked for split settlement under "Invoice Number" column.

***

## Cancel Split Settlement

Transactions that have been previously configured to be split settled can still be cancelled as long as the transaction status remains as "Payment Success". You can cancel the split settlement of a transaction by following the steps below:&#x20;

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Reports** from the menu, then choose **Reconciled Transactions**
3. Filter transactions with "Payment Success" status and "Split Settlement" set to "Yes," then click "Search"
4. Select a transaction, proceed to the action menu and click "Settlement Configuration."
5. Details of the transaction and the destination bank account will be shown
6. There are two ways to cancel split settlement of a transaction:
   * Click the ⛔ icon next to the bank account until only one account remains, then click "Save Configuration"
   * Alternatively, click "Reset Configuration," then "Save Configuration"
7. Upon successful cancellation, a success notification will appear, and the split settlement icon will vanish.

***

## Troubleshooting

### Invalid Split Settlement Bank Account

An invalid split settlement bank account error occurred due to an incorrect input of the split settlement bank account destination configuration. This caused our system to be unable to process the settlement with the transaction status "Pending Settlement".&#x20;

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Reports** from the menu, then choose **Reconciled Transactions**
3. Filter transactions with "Pending Settlement" status and input the invoice number, then search
4. Changes can be made if the transaction remark is "Split Settlement Bank Account Invalid." Click "Settlement Configuration" to modify data
5. A pop-up box will appear that shows the settlement configuration of the transaction, then fill the necessary fields field&#x20;
6. After the pop up settlement configuration page appears, fill in the empty bank account field with a valid bank account.
7. After selecting the desired bank account, click “Save Configuration”&#x20;
8. Upon a success configuration, a notification will appear.

### Notable Rule

1. Through split settlement, merchants receive data distribution from several settlement batches based on configured accounts.
2. If the configured split settlement amount is less than the total settlement amount, the remainder goes to the default account set on the Settlement Settings page.
3. Configuration changes can only be made for transactions with "Payment Success" and "Pending Settlement" statuses. Transactions with other statuses cannot be changed as the settlement batches have been created.&#x20;
4. Refunding a split settlement transaction deducts the split amounts from upcoming batches. Refund fees from DOKU are subtracted from the batch settlement funds.\
   The following is an illustration of how refunding a split settlement transaction is processed.

   * A transaction contains an amount of IDR 100,000 with a fee of IDR 5,000
   * 60% is settled to bank account X
   * 40% is settled to bank account Y

   If a refund occurs, the amount transferred to bank account X is reduced by IDR 60,000 and bank account Y is reduced by IDR 40,000.
5. Refund fees are deducted from batch settlements recorded on Settlement Settings page.

### Status Mapping

* Payment Success: Successfully recorded transactions in the DOKU system, to be distributed to merchants per configured settings.
* Pending Settlement: Successful transactions reconciled between DOKU & Acquirer but pending due to incorrect transaction information or configuration.
* Total Settlement Amount: Net transaction value DOKU will distribute to the merchant.

***

## FAQ

<details>

<summary>Can I make split settlement with API?</summary>

Yes, please refer to our [Split Settlement API Reference](https://developers.doku.com/accept-payment/finance-and-settlement/split-settlement).

</details>

<details>

<summary>Can I make a split settlement to an overseas bank account and a local bank account?</summary>

No, split settlement between an overseas bank account and a local bank account is not supported. You can only split settlements under the following conditions:

* Between multiple local bank accounts (e.g., BCA and Mandiri within Indonesia)
* Between multiple overseas bank accounts (e.g., DBS Singapore and UOB Singapore)

</details>


# Hold and Release

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only
{% endhint %}

Hold and Release feature provides you with control over payment disbursements by allowing you to temporarily hold funds and release them based on your business requirements. This feature enhances security and reduces the risk of unauthorized transactions.

***

## **Key Features**

* **Manual Control:** Manually review and approve transactions before funds are released.
* **Fraud Prevention:** Mitigate the risk of fraudulent activities by implementing additional verification steps.
* **Customizable Hold Periods:** Define specific time frames for holding funds based on your business needs.

***

## **Use Cases**

* **Risk Management:** Minimize financial risks by manually reviewing high-value transactions.
* **Fraud Prevention:** Implement additional security measures to protect against unauthorized transactions.
* **Regulatory Compliance:** Ensure compliance with industry regulations by controlling fund releases.

Please refer to our [API Reference ](https://developers.doku.com/accept-payment/finance-and-settlement/hold-and-release-settlement)on how to implement Hold and Release feature for your business account.


# Custom Report

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only
{% endhint %}

Custom Settlement Report feature empowers you with comprehensive control over your financial data. Generate customized reports tailored to your specific business needs, providing insights into transaction details, fees, and settlement timelines.

***

## **Key Features**

* **Flexible Reporting:** Create reports based on selected parameters such as time range, transaction types, and more.
* **Resend Report:** Resend your settlement batch reports for seamless integration with your financial systems.
* **Transaction Details:** Gain granular insights into each transaction for enhanced financial analysis.

***

## **Use Cases**

* **Financial Analysis:** Analyze transaction data to make informed business decisions.
* **Accounting Integration:** Seamlessly integrate settlement data into your accounting software.
* **Regulatory Compliance:** Generate reports for compliance purposes and audits.

Please refer to our [API Reference](https://developers.doku.com/accept-payment/finance-and-settlement/custom-settlement-report) on how to implement Custom Settlement Report for your business account.


# Refund

DOKU processes refunds only upon the Merchant's request. Refunds can be **full** or **partial**, depending on the requested refund amount.

> **Important:**
>
> * The Merchant remains responsible for the original transaction fee, regardless of the refund amount, unless otherwise agreed with the Customer.
> * Refunds can only be processed for eligible transactions.

## 🇮🇩 Business Account

### Refund for Non-Card Transactions

If you have an Indonesian Business Account, you can request a refund for non-card transactions by following the steps below:

1. [Submit a support ticket](https://help.doku.com/en/support/tickets/new) or send an email to <care@doku.com>&#x20;
2. Provide the following details:
   1. Brand ID
   2. Invoice Number
   3. Transaction Date
   4. Transaction Amount
   5. Customer's Bank Account Details
   6. Refund Amount (Full or Partial)

### Refund for Card Transactions

If you have an Indonesian Business Account, you can refund eligible card transactions directly from the DOKU Dashboard by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Reports** from the menu, then choose **Transactions**&#x20;
3. **Transactions Report** page will appear, then click the transaction's row to open its details
4. Click **Refund Payment**
5. Enter the amount to refund

   > The refund can be full or partial, depending on your preference.
6. Click **Refund** to process the refund.

> **Important:**
>
> * Refunds are only available for settled transactions.
> * Transactions involved in disputes cannot be refunded through the Dashboard.
> * Partial refunds reduce the original transaction amount but keep the original transaction record intact.

***

## 🇲🇾 Business Account

If you have a Malaysian Business Account, you can request a refund for your transactions by following the steps below:

1. Send an email to <help@senangpay.my>&#x20;
2. Provide the following details:
   1. Brand ID
   2. Invoice Number
   3. Transaction Date
   4. Transaction Amount
   5. Customer's Bank Account Details
   6. Refund Amount (Full or Partial)

{% hint style="info" %}
Refunds for Malaysian Business Accounts are currently processed manually via email. Refunds through the Dashboard will be available soon.
{% endhint %}

***

## Best Practices

* Always verify the transaction status before initiating a refund.
* Inform customers promptly once the refund has been processed.
* Allow up to 7-14 business days for Card refunds to reflect on the customer's account, depending on the issuing bank.
* Use secure communication channels when submitting bank account information for Non-Card refunds.
* Keep internal records of refund requests for audit and reconciliation purposes.

***

## FAQ

<details>

<summary>How long does a Card refund take to complete?</summary>

Refunds typically take between 7–14 business days to be reflected on the customer's credit or debit card, depending on their issuing bank.

</details>

<details>

<summary>Can I cancel a refund request?</summary>

No. Once a refund is processed, it cannot be canceled. Please verify all details before submitting a refund request.

</details>

<details>

<summary>Can a refund can be issued before the transaction is settled?</summary>

This is only possible for card transactions, and in that case, the transaction will be voided, not refunded. For non-card transactions, refunds can only be processed after the transaction has been settled. If you submit a refund request before settlement, it will remain pending until the transaction is fully settled. Once settlement is complete, the refund will be processed accordingly.

</details>


# Dispute

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only
{% endhint %}

Dispute occurs when you have received the funds of the transactions, but could not find the transaction record in the transaction report. Merchants with direct settlement transactions can manage disputed transactions directly with the DOKU Dashboard.

***

## Submit Dispute Request[​](https://dashboard.doku.com/docs/docs/finance/dispute-request#submit-dispute-request) <a href="#submit-dispute-request" id="submit-dispute-request"></a>

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Reports** from the menu, then choose **Dispute**
3. **Dispute** page will appear, then click **Add** button and fill in all required fields on the dispute request data you want to submit, then click **Submit** button
4. You can check the dispute request data on this page and monitor the status with the definition below:
   * In Process = It is on checking process by DOKU system
   * Open = It is waiting to be followed up by the role with checker access, Admin or Finance.
   * Close = It has been successfully followed up by the role with checker access. Admin or Finance, and you can find the record now in the transaction report
   * Rejected = It has been rejected by the DOKU system as the stated reason.

***

## Follow Up Dispute Request[​](https://dashboard.doku.com/docs/docs/finance/dispute-request#follow-up-dispute-request) <a href="#follow-up-dispute-request" id="follow-up-dispute-request"></a>

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Reports** from the menu, then choose **Dispute**
3. **Dispute** page will appear, then review any record with **Open** status. If it is already as expected and you want to proceed, then click the **Follow Up** button
4. If it is successful, the status will be updated to **Close** and you can now find the transaction in your transaction report.


# Manage Reports

View and download reports for transactions, settlements, and more

## Report Types

| Report Type                                                                          | Description                                                                                                      | Use Case                                                                                                     | Export Options                                                                  |
| ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------- |
| [Analytics](/get-started/manage-business/manage-reports/analytics)                   | Displays visual graphs of business and transaction performance over time                                         | For business owners and stakeholders to visualize trends and assess overall business health                  | View graphs directly in the Dashboard or export them as images                  |
| [Transaction Report](/get-started/manage-business/manage-reports/transaction-report) | Displays all transactions with various statuses, including successful, pending, failed, or expired               | For operations teams to review, monitor, and reconcile all recorded transactions                             | Export files manually or receive them automatically via SFTP or scheduled email |
| [Settlement Report](/get-started/manage-business/manage-reports/settlement-report)   | Displays all successful transactions where funds have been received and settled into the merchant's bank account | For finance teams to reconcile settlement amounts with internal financial records and identify discrepancies | Export files automatically via SFTP or email, based on the settlement schedule  |


# Analytics

<figure><img src="/files/bzCJ7tJyTDDFgLz7S6ec" alt=""><figcaption></figcaption></figure>

{% @supademo/embed demoId="cm9i16jfh21rvljv51ys3ccyn" url="<https://app.supademo.com/demo/cm9i16jfh21rvljv51ys3ccyn>" %}

**Analytics** on DOKU Dashboard homepage provides valuable insights into your business performance. You can use it to monitor transaction data, detect issues, and optimize payment experiences. The following are the available analytics:

* **Gross Volume**\
  Total transaction volume before DOKU fees are deducted.
* **Successful Transactions**\
  Number of transactions successfully completed and processed.
* **Top Failed Transactions**\
  Common reasons for transaction failures, helping you diagnose recurring issues.
* **Top Payment Methods**\
  The most frequently used payment methods by your customers.

***

## View and Filter Analytics

You can view and filter the analytics by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Dashboard**
3. In the **Trend** section, set a custom **date range** to adjust the period of analytics displayed.

***

## Customize View

You can customize the view of your analytics by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Dashboard**
3. In the **Trend** section, click **Edit View**
4. Choose which analytics to display by ticking the checkboxes.

***

## Export Analytics

You can export your analytics into a file by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Dashboard**
3. Click the **Download icon** at the top right of the graph to export your selected analytics. Export options are .PNG and .CSV file.

***

## FAQ

<details>

<summary>What time zone is used in the analytics data?</summary>

All analytics data is displayed in **GMT+7 for Jakarta**. Please adjust accordingly when comparing with external systems.

</details>

<details>

<summary>How often is the data updated?</summary>

Analytics are updated in **real time**.

</details>

<details>

<summary>Can I filter analytics by payment method?</summary>

Currently, you can filter by **date range**. For more granular breakdowns by payment method or channel, use the **Top Payment Methods** and **Top Failed Transactions** analytics.

</details>

<details>

<summary>Are refunds and chargebacks included in the analytics?</summary>

Refunds and chargebacks are **not included** in **Gross Volume** but may affect **Successful Transactions** depending on the processing stage.

</details>

<details>

<summary>What does "Top Failed Transactions" include?</summary>

This includes failure reasons such as:

* Insufficient funds
* Bank downtime
* Payment timeout
* Invalid payment details

You can use this to troubleshoot recurring customer issues.

</details>


# Transaction Report

## Export Report

There are 2 methods to export your reports: **Single Export**, and **Scheduled Export**.

Single export is a manual, one-time action that allows you to download transaction data, such as invoices or payments, for a specific date range or filter. This method is typically used for quick, ad-hoc reporting, for example, reconciling today’s payments or sharing transaction details with your accountant or internal team.

* Quick ad-hoc reports (e.g., reconciling today’s payments).
* Sharing transaction details with your accountant or team.

Scheduled export, on the other hand, is an automated, recurring export that can be set to run daily, weekly, or monthly without manual intervention. This method is useful for regular compliance or financial reporting, such as generating end-of-month statements, or for creating backups and integrations with accounting or ERP systems.

* Regular compliance/financial reporting (e.g., end-of-month statements).
* Backups or integrations with accounting tools.

For both single and scheduled exports, the available file formats are CSV (.csv) and XLSX (.xlsx). CSV is ideal for lightweight, simple data extraction, while XLSX offers a more structured format compatible with most spreadsheet applications.

### Export Instant Report

You can retrieve a transaction report by following the steps outlined in the interactive demo below:

{% @supademo/embed demoId="cm9av1w2k2kzepxcbher4pi2d" url="<https://app.supademo.com/demo/cm9av1w2k2kzepxcbher4pi2d>" %}

{% hint style="info" %}
If the demo does not work, please visit the following page <https://app.supademo.com/demo/cm9av1w2k2kzepxcbher4pi2d?step=1>
{% endhint %}

### Set Up Scheduled Report

You can schedule a transaction report to be sent to you by following the steps outlined in the interactive demo below:

{% @supademo/embed demoId="cm9b06mxm2osupxcb9rhbjn8f" url="<https://app.supademo.com/demo/cm9b06mxm2osupxcb9rhbjn8f>" %}

{% hint style="info" %}
If the demo does not work, please visit the following page <https://app.supademo.com/demo/cm9b06mxm2osupxcb9rhbjn8f?step=1>
{% endhint %}

### Set Up SFTP Settings

You can set up your SFTP settings by following the steps outlined in the interactive demo below:

{% @supademo/embed demoId="cm9b1yl582qpipxcbm53wbubx" url="<https://app.supademo.com/demo/cm9b1yl582qpipxcbm53wbubx>" %}

{% hint style="info" %}
If the demo does not work, please visit the following page <https://app.supademo.com/demo/cm9b1yl582qpipxcbm53wbubx?step=1>
{% endhint %}

***

## Field Definitions

### Activity

The follwing is the list of activities that you can find in the transaction report along with their definitions:

| Activity               | Description                                         | Payment Methods                                |
| ---------------------- | --------------------------------------------------- | ---------------------------------------------- |
| Generate Payment Code  | Payment code is created by Merchant                 | Bank Transfer, Convenience Store               |
| Inquiry                | Payment code is inquired by Customer                | Bank Transfer, Convenience Store               |
| <p>Payment<br></p>     | Payment code is paid by Customer                    | Bank Transfer, Convenience Store               |
| Sale                   | <p>Payment is made by Customer<br></p>              | <p>Cards, Direct Debit, e-Wallet, QRIS<br></p> |
| <p>Full Refund<br></p> | <p>Transaction is refunded with full amount<br></p> | Cards, QRIS (API only)                         |
| Partial Refund         | Transaction refunded with partial amount            | Cards, QRIS (API only)                         |

***

### Status

The follwing is the list of statuses that you can find in the transaction report along with their definitions:

| Status              | Description                                                       | Final Status   | Action Needed                                                                      | Payment Methods                              |
| ------------------- | ----------------------------------------------------------------- | -------------- | ---------------------------------------------------------------------------------- | -------------------------------------------- |
| <p>Pending<br></p>  | <p>Transaction is waiting to be paid by the customer<br></p>      | <p>NO<br></p>  | <p>Wait for HTTP Notification or Call Check Status API to get final status<br></p> | Bank Transfer, Convenience Store             |
| Success             | <p>Transaction is paid by the customer<br></p>                    | YES            | -                                                                                  | <p>All Payment Methods<br></p>               |
| <p>Failed<br></p>   | Transaction is failed to be paid                                  | <p>YES<br></p> | <p>Generate a new payment request to DOKU<br></p>                                  | Bank Transfer, Cards, Direct Debit, e-Wallet |
| <p>Expired<br></p>  | <p>Transaction due date is exceeded<br></p>                       | <p>YES<br></p> | Generate new payment request to DOKU                                               | Bank Transfer, Convenience Store             |
| <p>Timeout<br></p>  | <p>Transaction reaches a timeout due to connection issues<br></p> | NO             | <p>Call Check Status API to get final status<br></p>                               | e-Wallet                                     |
| <p>Redirect<br></p> | Transaction is waiting for acquirer's verification                | <p>NO<br></p>  | <p>Wait for HTTP Notification or Call Check Status API to get final status<br></p> | Cards                                        |

***

### Response Code and Response Message

#### Payment Method: Cards

| Response Code   | Response Message                         | Description / Action Taken                                                               |
| --------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------- |
| 00              | Transaction approved                     | The transaction was completed successfully. No further action is required.               |
| 01              | Refer to card issuer                     | Contact the card issuer for clarification or additional information.                     |
| 02              | Refer to card issuer – special condition | Contact the card issuer to understand special conditions applied to this transaction.    |
| 03              | Invalid merchant                         | Contact the card issuer for further clarification.                                       |
| 04              | Pick up card                             | The card has been captured. Contact the card issuer for next steps.                      |
| 05              | Do not honor                             | The transaction was declined. Contact the card issuer to determine the reason.           |
| 06 (Visa)       | System error                             | Retry the transaction or contact the card issuer if the issue persists.                  |
| 07 (Visa)       | Pick up card – special condition         | The card has been captured due to special conditions. Contact the card issuer.           |
| 08 (Visa)       | Honor with identification                | The transaction requires additional identity verification. Ensure valid ID is available. |
| 10              | Partial approval                         | Only part of the transaction amount was approved. Contact the card issuer for details.   |
| 11 (Mastercard) | VIP approval                             | The transaction was approved with VIP status. No action is required.                     |
| 12              | Invalid transaction                      | Verify transaction details and retry or contact the card issuer.                         |
| 13              | Invalid amount                           | Check the transaction amount and retry.                                                  |
| 14              | Invalid card number                      | Verify the card number or contact the card issuer.                                       |
| 15              | Issuer not found                         | Contact the card issuer to confirm card validity.                                        |
| 19 (Visa)       | Re-enter transaction                     | Retry the transaction. Contact the card issuer if the issue continues.                   |
| 21 (Visa)       | No action taken                          | Contact the card issuer for clarification.                                               |
| 25 (Visa)       | Record not found                         | Contact the card issuer to confirm transaction records.                                  |
| 28 (Visa)       | System temporarily unavailable           | Retry later or contact the card issuer.                                                  |
| 30 (Mastercard) | Format error                             | Review transaction data format and retry.                                                |
| 39 (Visa)       | No credit account                        | Contact the card issuer to confirm account status.                                       |
| 41              | Lost card                                | The card has been reported lost. Contact the card issuer immediately.                    |
| 43              | Stolen card                              | The card has been reported stolen. Contact the card issuer immediately.                  |
| 46 (Visa)       | Closed account                           | Contact the card issuer for further information.                                         |
| 51              | Insufficient funds                       | Ensure sufficient balance before retrying the transaction.                               |
| 52 (Visa)       | No checking account                      | Contact the card issuer to verify account availability.                                  |
| 53 (Visa)       | No savings account                       | Contact the card issuer to verify account availability.                                  |
| 54              | Expired card                             | Use a valid card and retry the transaction.                                              |
| 55              | Incorrect PIN                            | Re-enter the correct PIN or contact the card issuer.                                     |
| 57              | Transaction not permitted (cardholder)   | Contact the card issuer to enable this transaction type.                                 |
| 58              | Transaction not permitted (terminal)     | Use another terminal or contact the card issuer.                                         |
| 59              | Suspected fraud                          | Contact the card issuer immediately to verify the transaction.                           |
| 61              | Withdrawal limit exceeded                | Reduce the withdrawal amount or request a limit increase.                                |
| 62              | Restricted card                          | Contact the card issuer for restriction details.                                         |
| 63              | Security violation                       | Contact the card issuer for clarification.                                               |
| 64 (Visa)       | AML requirements not met                 | Contact the card issuer regarding compliance requirements.                               |
| 65              | Withdrawal frequency exceeded            | Retry later or contact the card issuer to adjust limits.                                 |
| 70 (Mastercard) | Contact card issuer                      | Contact the card issuer for further instructions.                                        |
| 70 (Visa)       | PIN required                             | Enter a valid PIN or contact the card issuer.                                            |
| 71 (Mastercard) | PIN not changed                          | Contact the card issuer to change the PIN.                                               |
| 74              | PIN encryption error                     | Contact the card issuer for technical clarification.                                     |
| 75              | PIN attempts exceeded                    | Contact the card issuer to unblock the card.                                             |
| 76 (Mastercard) | Invalid destination account              | Verify destination account details and retry.                                            |
| 76 (Visa)       | Unsolicited reversal                     | Contact the card issuer for clarification.                                               |
| 77 (Mastercard) | Invalid source account                   | Verify source account details and retry.                                                 |
| 78 (Visa)       | Card blocked – first use                 | Contact the card issuer to activate the card.                                            |
| 78 (Mastercard) | Invalid account                          | Verify account details and retry.                                                        |
| 79 (Mastercard) | Card life cycle issue                    | Contact the card issuer for card status details.                                         |
| 79 (Visa)       | Already reversed                         | The transaction has already been reversed. Contact the card issuer.                      |
| 80 (Mastercard) | Issuer unavailable                       | Retry later or contact the card issuer.                                                  |
| 80 (Visa)       | No financial impact                      | Contact the card issuer for clarification.                                               |
| 81 (Mastercard) | Domestic debit not allowed               | Use another payment method or contact the card issuer.                                   |
| 81 (Visa)       | PIN cryptographic error                  | Contact the card issuer for resolution.                                                  |
| 82 (Visa)       | Security validation failed               | Contact the card issuer regarding CVV or security checks.                                |
| 82 (Mastercard) | Policy violation                         | Contact the card issuer for policy-related details.                                      |
| 83 (Mastercard) | Fraud or security concern                | Contact the card issuer immediately.                                                     |
| 84 (Mastercard) | Invalid authorization life cycle         | Contact the card issuer for clarification.                                               |
| 85              | Approved without decline reason          | The transaction was approved. No further action is required.                             |
| 86              | PIN verification failed                  | Contact the card issuer to resolve PIN issues.                                           |
| 87 (Mastercard) | Purchase only – no cashback              | Use another method if cashback is required.                                              |
| 88 (Mastercard) | Cryptographic failure                    | Contact the card issuer for technical support.                                           |
| 89 (Mastercard) | Unacceptable PIN                         | Contact the card issuer to reset the PIN.                                                |
| 89 (Visa)       | Not eligible for financial information   | Contact the card issuer for eligibility details.                                         |
| 90 (Mastercard) | Cutoff in progress                       | Retry the transaction later.                                                             |
| 91              | Issuer or switch unavailable             | Retry later or contact the card issuer.                                                  |
| 92              | Routing destination not found            | Contact the card issuer for clarification.                                               |
| 93 (Visa)       | Legal violation                          | The transaction cannot be completed due to legal restrictions.                           |
| 94              | Duplicate transaction                    | Verify transaction status with the card issuer.                                          |
| 96              | System malfunction                       | Retry later or contact the card issuer.                                                  |
| 1A (Visa)       | Authentication required                  | Complete additional authentication steps.                                                |
| 6P (Visa)       | Verification failed                      | Contact the card issuer for clarification.                                               |
| B1 (Visa)       | Surcharge not permitted                  | Remove surcharge and retry the transaction.                                              |
| B2 (Visa)       | Surcharge not supported                  | Contact the card issuer for surcharge rules.                                             |
| N0 (Visa)       | Stand-In Processing enforced             | Contact the card issuer for clarification.                                               |
| N3 (Visa)       | Cash service unavailable                 | Use another payment method.                                                              |
| N4 (Visa)       | Cash limit exceeded                      | Reduce the cash amount or request a higher limit.                                        |
| N5 (Visa)       | Resubmission not allowed                 | Contact the card issuer for further details.                                             |
| N7 (Visa)       | CVV2 validation failure                  | Verify card details or contact the card issuer.                                          |
| N8 (Visa)       | Amount exceeds preauthorization          | Reduce the amount or request a higher limit.                                             |
| P5 (Visa)       | PIN unblock denied                       | Contact the card issuer for assistance.                                                  |
| P6 (Visa)       | PIN change denied                        | Contact the card issuer for assistance.                                                  |
| Q1 (Visa)       | Card authentication failed               | Contact the card issuer to resolve authentication issues.                                |
| R0 (Visa)       | Stop payment order                       | Contact the card issuer for details.                                                     |
| R1 (Visa)       | Authorization revoked                    | Contact the card issuer for clarification.                                               |
| R2 (Visa)       | Not eligible for Visa PIN                | Use another transaction method.                                                          |
| R3 (Visa)       | All authorizations revoked               | Contact the card issuer immediately.                                                     |
| Z3 (Visa)       | Unable to connect online                 | Retry later or contact the card issuer.                                                  |
| 1Z (Mastercard) | Authorization system unavailable         | Retry later or contact the card issuer.                                                  |

***

## FAQ

<details>

<summary>What if my transaction fails to process?</summary>

The transaction may fail to be processed because the customer did not complete the payment.&#x20;

If the transaction is failed due to a technical issue, DOKU will provide an error message in your transaction report. If you require further information about your failed transactions, you may [submit a ticket](http://help.doku.com/en/support/tickets/new) or send an email to <care@doku.com>.

</details>

<details>

<summary>I still have not received my transaction report. What should I do?</summary>

Please first ensure that the email address that you entered is correct. We will not be able to send the transaction report if the email address thay you entered is invalid.

Transaction report may take longer time to be exported depending on the number of transactions that are being extracted. A transaction report with over 50,000 transactions may take up to an hour to be exported.

If you still have not received your transaction report after the one-hour period, please contact your account manager or [submit a ticket](https://help.doku.com/en/support/tickets/new).

</details>

<details>

<summary>What is the difference between Settlement Report and Transaction Report?</summary>

A **Transaction Report** provides a complete record of all transactions, including those that are **successful, pending, failed, or expired**.

In contrast, a **Settlement Report** includes only **successful transactions** — meaning the transactions listed have been fully processed, and the corresponding funds have been received and settled into the merchant’s bank account.

For financial reporting and reconciliation purposes, merchants are strongly advised to refer primarily to the **Settlement Report**.

</details>

<details>

<summary>Can I edit a scheduled export after setting it up?</summary>

No. To make changes, you must first deactivate the existing scheduled report configuration and then create a new one.

</details>

<details>

<summary>At what time will I receive my scheduled reports?</summary>

Scheduled report emails are sent daily at 08:00 AM WIB/ICT (UTC +7).

</details>

<details>

<summary>Can a date range filter be applied to scheduled reports?</summary>

No, date range filters are not available for scheduled reports. If you need a custom date range, please use the single export feature instead.

</details>

<details>

<summary>Can I view transactions older than one year?</summary>

No, transaction data is retained for a period of one year only. Transactions beyond this timeframe are not accessible through our system.

</details>


# Settlement Report

## Configure Settlement Recipients

Your settlement report can be sent to you via email, SFTP, or both. You can manage the settlement report settings by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Finance Settings** section, select **Settlement**
4. **Settlement Settings** page will appear where you can either choose to receive the settlement report by email, SFTP, or both by ticking the options under **Settlement Report Notification**
5. Click **SUBMIT** to save, and your settings will be effective for the next settlement batch.

{% hint style="info" %}
Your settlement report is sent to you automatically every time a settlement takes place. You are not required to retrieve the settlement report from the dashboard.&#x20;
{% endhint %}

***

## View Settlement Batch Transactions

You can find and view all your settlement reports by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Reports** from the menu, then choose **Settlements**
3. **Settlement Report** page will appear, then click the ellipsis icon **( ⋮ )** based on your choice of settlement batch, and select **Detail**
4. A pop-up box will appear that displays all the details of the selected settlement report

***

## Resend Settlement Batch Report

If you cannot locate a particular settlement batch report and wish to have the report sent to you again, you can do so by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Reports** from the menu, then choose **Settlements**
3. **Settlement Report** page will appear, then click the ellipsis icon **( ⋮ )** based on your choice of settlement batch, and select **Resend Report**
4. The settlement batch report will be sent to you either by email or SFTP, based on your settlement configuration.

***

## FAQ

<details>

<summary>I still have not received my settlement report. What should I do?</summary>

You will only receive your settlement report when a settlement takes place. If you cannot find your settlement report in your inbox or SFTP folder, you can resend your settlement report by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Reports** from the menu, then choose **Settlements**
3. **Settlement Report** page will appear, then click the ellipsis icon **( ⋮ )** based on your choice of settlement batch, and select **Resend Report**
4. The settlement batch report will be sent to you either by email or SFTP, based on your settlement configuration.

If the above method does not work, please ensure that your settlement notification has been set up. Visit [#configure-settlement-recipients](#configure-settlement-recipients "mention") for instructions.

</details>

<details>

<summary>What is the difference between Settlement Report and Transaction Report?</summary>

A **Transaction Report** provides a complete record of all transactions, including those that are **successful, pending, failed, or expired**.&#x20;

In contrast, a **Settlement Report** includes only **successful transactions** — meaning the transactions listed have been fully processed, and the corresponding funds have been received and settled into the merchant’s bank account.

For financial reporting and reconciliation purposes, merchants are strongly advised to refer primarily to the **Settlement Report**.

</details>


# Manage Operations

Monitor daily business activities and ensure smooth operations

## Monitor Activity Logs

You can track user activities such as key changes, login attempts, permission updates, and other security-related events by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Team & Security** section, select **Activity Logs**
4. **Activity Logs** page will appear, where you can track user activities such as key changes, login attempts, permission updates, and other security-related events.

***

## Monitor Maintenance

You can configure and monitor notifications related to system maintenance and product updates by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Notifications** section, select **Maintenance & Product Updates**
4. **Maintenance & Product Updates** page will appear, then ensure the **Maintenance Service** toggle is switched on
5. Enter the email addresses of the recipients who should receive maintenance notifications. A maximum of three recipients is allowed.

***

## Manage Notification Logs

### View Transaction Notification

You can view transaction notifications by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Notifications** section, select **HTTP Notifications**
4. Notifications from the last 8 days will be displayed, then filter the list (if necessary) based on
   1. **Invoice Number**:
      1. Click the **Invoice Number** search bar
      2. Input the invoice number
      3. Click **Search**
   2. **Endpoint URL**:
      1. Click the **Endpoint URL** search bar
      2. Input the endpoint URL
      3. Click **Search**
   3. **Date Range**:
      1. Click the **Datepicker**
      2. Select the start and end date
      3. Click **Search**
5. Click the **Eye icon** on the order row to view the **Order Summary**, **Notification History**, and **Notification Details**.

### Resend Transaction Notification

You can resend notification (renotify) for a transaction by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Notifications** section, select **HTTP Notifications**
4. Locate the order using filters if needed
5. Click the **Paper Plane icon** on the order row
6. Confirm by clicking **Yes** when prompted.

***

## Manage Email Logs

### View Email Logs

You can view, filter, and resend email notifications sent by [**noreply@doku.com**](mailto:noreply@doku.com) related to your merchant account by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Notifications** section, select **Email Notifications**
4. Email from the last 8 days will be displayed, then filter the list (if necessary) based on
   1. **Email Subject**:
      1. Click the **Email Subject** search bar
      2. Input the subject
      3. Click **Search**
   2. **Email To**:
      1. Click the **Email To** search bar
      2. Input the recipient email address
      3. Click **Search**
   3. **Email Sender**:
      1. Click the **Email Sender** search bar
      2. Input the sender's email
      3. Click **Search**
   4. **Date Range**:
      1. Click the **Datepicker** for Start Date and End Date
      2. Select your preferred dates
      3. Click **Search**

### Resend Email Notification

You can resend an email notification by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Notifications** section, select **Email Notifications**
4. Locate the email
5. Click the **Paper Plane** icon
6. Confirm by clicking **Yes**.

***

## FAQ

<details>

<summary>I didn’t receive the payment notification/callback on my server. What should I do?</summary>

If you didn’t receive the notification:

1. Log in to the [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs).
2. Go to **Settings** > **HTTP Notification**.
3. Find the notification using filters.
4. Click **Resend**

If the issue persists:

* Check your server logs.
* Confirm your endpoint is active and returning HTTP 2xx responses.
* [Submit a support ticket](https://help.doku.com/en/support/tickets/new) with:
  * Notification URL
  * Transaction date
  * Invoice number or Request ID

</details>

<details>

<summary>I can’t resend the notification through the DOKU Dashboard. What should I do?</summary>

[Submit a support ticket](https://help.doku.com/en/support/tickets/new) with:

* Notification URL
* Transaction date
* Invoice number or Request ID

</details>

<details>

<summary>My transaction is status is failed to be updated. What should I do?</summary>

Troubleshoot using the following checklist:

1. **Ensure that the Notification URL** is correctly set for each payment channel.
2. **Check your date filter range** — make sure you are selecting dates where actual transactions exist.
3. **Resend transaction notification** to update the status.

</details>

<details>

<summary>Why is my transaction missing from HTTP Notification Report?</summary>

There are several possible reasons. You can troubleshoot using the following checklist:

1. Ensure the Notification URL is correctly set for each payment channel.
   * Go to each channel's configuration and locate the Notification URL field.
   * Input the correct URL into that field.
2. Check your date filter range.
   * Make sure you're filtering dates where actual transactions exist.
   * Filtering empty or invalid date ranges may result in no data appearing.

</details>

<details>

<summary>Can I customize the HTTP Notification report template?</summary>

No. Currently, the HTTP Notification Report uses DOKU's default template and customization is not supported.

</details>

<details>

<summary>What status types can appear in the HTTP Notification report?</summary>

* **Success** – Notification was successfully delivered (HTTP status 200).
* **Failed** – Notification failed (merchant server responded with 4xx or 5xx).

DOKU retries notification delivery up to **6 times** before marking it as permanently failed.

</details>

<details>

<summary>How to unsubscribe from DOKU email notifications or newsletters?</summary>

You can find an "Unsubscribe" link at the bottom of the email. Clicking on that link will guide you through the process.

</details>


# Manage Customers

View customer data and manage transaction-related interactions

## Add Customers

You can populate your customers database by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Customers** from the menu
3. **Customers** page will appear, then select one of the following options:
   * **Create Customer**: to add a single customer manually.
   * **Import Sheet**: to upload customers in bulk via CSV template.

### Single Creation

To create a customer manually:

1. **Click** **Create Customer**
2. **Fill in** the following fields:
   * **Full Name** (mandatory): Customer's complete name
   * **Email**: Customer's email address
   * **Phone Number**: Customer’s phone number, including country code
   * **Country**: Select the customer's country
   * **Birthday**: Customer's date of birth (format: DD-MM-YYYY)
   * **Street Address**: Full address (e.g., street name, number, and area)
   * **State**: Province or state
   * **City**: City where the customer is located
   * **Postal Code**: Area postal code
   * **Company Name** (optional): If the customer represents a business
   * **Reference ID** (optional): Internal ID used to track the customer
   * **Label** (optional): Tags to categorize customers (you can assign multiple labels)
3. **Click** **Save** to create the customer profile.

> **Notes:**
>
> * The **Full Name** field is mandatory and cannot be left empty.
> * Ensure data accuracy to avoid issues during future transactions or communications.

***

### Bulk Creation

To create customers in bulk using a CSV file:

1. **Click** **Import Sheet** on the **Customers** page
2. **Download** the provided CSV template
3. **Fill in** the customer data according to the template instructions
4. **Upload** the completed file
5. **Submit** the file for processing.

> **Notes:**
>
> * Verify the formatting before uploading to prevent errors.
> * Large imports may take a few minutes to process.

***

## Edit Customers

You can edit the data of your customers by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Customers** from the menu
3. **Customers** page will appear, then **search** for and **select** the customer you wish to edit by clicking the Edit icon
4. Update the necessary fields
5. Click **Save Customer** to apply the changes.

***

## Create Static VA

Visit [Customer Static VA](/accept-payments/no-integration-products/customer-static-va) for the step-by-step instructions.


# Set Up a Promo

## Create a Promo

### 🇮🇩 Business Account

With an Indonesian Business Account,, you can create a promo by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Promo** from the menu
3. **Promo** page will appear, then click **Create**
4. **General Information** tab will appear, where you can enter the following required information:

   * Promo Name - maximum of 15 characters
   * Promo Code - unique code that consists of uppercase letters and numbers
   * Promo Description - maximum of 300 characters
   * Start & End Date - follows format of *dd/MM/yyyy HH:mm*.
   * Terms & Condition - may contain text or links to a social media or website.

   <figure><img src="/files/37cOYH2PQMCgE3F0TcHe" alt=""><figcaption></figcaption></figure>
5. Click **Save & Next**
6. **Promo Specification** tab will appear, where you can enter the following required information:

   * Discount Type -  can be either be flat rate or percentage
   * Budget - can only contain numbers
   * Discount Amount - can only contain numbers
   * Max Discount Amount - can only contain numbers
   * Max Transaction Limit - can only contain numbers
   * Max Transaction / Account - can only contain numbers
   * Setting Promo by SKU (optional)

   <figure><img src="/files/mDhFwXrmXcdcS3Uhoh7I" alt=""><figcaption><p>You can set up a promo by importing a file using the provided template</p></figcaption></figure>
7. Click **Save & Next**&#x20;
8. **Payment Details** tab will appear, then select the payment method(s) you want to include in the promo by following the steps below:

   1. Click **Only Certain Payment Methods**
   2. Choose the payment method(s) eligible for the promo
   3. Activate **Customer Identifier** if the promo is targeted to specific customers, where you can fill in the following fields:
      1. Max Transaction per Account
      2. Transaction Cycle (Daily or During Promo)
   4. **Customer Identifiers** vary by payment method:
      1. Cards:
         * Email
         * Phone Number
         * Customer ID
         * Card Number
      2. DOKU e-Wallet
         * Email
         * Phone Number
         * Customer ID
   5. Choose if the promo applies to **All Banks** or **Specific Banks**. If you select specific banks, you’ll need to upload a **BIN list** containing the eligible card numbers
   6. Activate **Custom Object Promo** if the promo requires specific criteria. Define the criteria, operator, and value to set custom conditions.

   <figure><img src="/files/khDRjPFAP42zoCxqQVhF" alt=""><figcaption><p>Note: Only Cards and DOKU e-Wallet are currently available</p></figcaption></figure>
9. Click **Save & Next**&#x20;
10. Promo has been successfully created. To view the detail of your Promo, click the ellipsis button **( ⋮ )** and select **Promo Details**

    <figure><img src="/files/QVNCFvD8l3lWkOGrCNLp" alt=""><figcaption></figcaption></figure>

    <figure><img src="/files/cxbbTeJ7Q5DwveGrI8Sw" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Please note that Budget and Terms of Conditions cannot be altered once they have been activated. You have the option to save the campaign as a draft and schedule the activation of the promo based on a date that you designated.
{% endhint %}

### 🇲🇾 Business Account

With a Malaysian Business Account,, you can create a promo by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar

2. Select **Promo** from the menu

3. **Promo** page will appear, then click **Create**<br>

   <figure><img src="/files/IoPfUd7I6Km4ixI1XUhv" alt=""><figcaption></figcaption></figure>

4. **General Information** tab will appear, where you can enter the following required information:

   * Promo Name - maximum of 15 characters
   * Promo Code - unique code that consists of uppercase letters and numbers
   * Promo Description - maximum of 300 characters
   * Start & End Date - follows format of *dd/MM/yyyy HH:mm*.
   * Terms & Condition - may contain text or links to a social media or website.

   <figure><img src="/files/8T9YE2nAFeu8vbUID9f5" alt=""><figcaption></figcaption></figure>

5. Click **Save & Next**

6. **Promo Specification** tab will appear, where you can enter the following required information:

   <figure><img src="/files/eKvlUHDWqrtmMlXaipKh" alt=""><figcaption></figcaption></figure>

   1. Setting Promo by SKU (optional)
      1. Promotions can be applied to specific products within your [Digital Catalog](/accept-payments/no-integration-products/digital-catalog).  You can configure eligible products by following the steps below:
         1. Download the SKU template provided at the top-right corner of the page
         2. Fill in the SKU information
         3. Upload the completed file\
            **Important Notes:**
            * SKU values must exactly match the SKU names configured in your Digital Catalog
            * Any mismatch may cause the SKU to be excluded from the promotion eligibility
         4. Define the minimum quantity of eligible SKU(s) that customers must purchase before the promotion can be applied. If left blank, no minimum quantity requirement will be enforced
   2. Discount Type -  can be either be flat rate or percentage
   3. Budget - can only contain numbers
   4. Discount Amount - can only contain numbers
   5. Max Discount Amount - can only contain numbers
   6. Max Transaction Amount - can only contain numbers
   7. Promo Quota - defines the maximum number of times the promotion can be redeemed. This is commonly used for percentage-based promotions. If both Budget and Promo Quota are configured, the promotion will stop once either threshold is reached first
   8. Daily Promo Quota - defines the maximum number of redemptions allowed per day. Once the daily quota is reached, the promotion will become unavailable until the next day

   <figure><img src="/files/uIAPGlcSGIA12nB3iSaN" alt=""><figcaption></figcaption></figure>

7. Click **Save & Next**&#x20;

8. **Payment Details** tab will appear, then select the payment method(s) you want to include in the promo. **All payment methods** is the default option

<figure><img src="/files/AtH5mzVk6rPq1rvTQWT6" alt=""><figcaption></figcaption></figure>

9. Click **Save & Next**&#x20;
10. Promo has been successfully created. To view the detail of your Promo, click the ellipsis button **( ⋮ )** and select **Promo Details**

<figure><img src="/files/lVDwXaKAPxnOcD4qxqoM" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/e70hE6Uwf4549NvsSex9" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Please note that Budget and Terms of Conditions cannot be altered once they have been activated. You have the option to save the campaign as a draft and schedule the activation of the promo based on a date that you designated.
{% endhint %}

***

## Promo Details

### General Information

|                    |                                                                                                                                                                                                  |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Field**          | **Description**                                                                                                                                                                                  |
| Promo Name         | <p>The official title of the promotion</p><p><br>Example: "Holiday Sale 2025"</p>                                                                                                                |
| Promo Code         | A unique alphanumeric code that customers can enter to redeem the promotion. It must be unique and in capital letters                                                                            |
| Description        | A brief explanation of the promotion's purpose, benefits, and how it works. This is shown to customers wherever the promo is displayed                                                           |
| Start Date         | The date and time when the promotion becomes active. Transactions before this time are not eligible for the promo                                                                                |
| End Date           | The date and time when the promotion expires. Transactions after this time will no longer qualify for the promo                                                                                  |
| Terms & Conditions | <p>The detailed rules and restrictions that govern the promotion. This can be shown as plain text or as a link to an external page</p><p><br>Example: "View full terms at example.com/terms"</p> |

***

### Promo Specification

|                                   |                                                                                                                                                                                                                                                                                                                                              |
| --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Field**                         | **Description**                                                                                                                                                                                                                                                                                                                              |
| Promo Category                    | <p>The classification of the promotion for reporting or segmentation purposes</p><p><br>Example: "Discount", "Cashback"</p>                                                                                                                                                                                                                  |
| Budget                            | The total monetary allocation for the promotion. Once the budget is depleted, the promo becomes inactive                                                                                                                                                                                                                                     |
| Discount Type (Flat / Percentage) | <p>Defines how the discount is calculated. Options include:<br>• Flat – Fixed amount off<br>• Percentage – Percentage off the transaction value</p>                                                                                                                                                                                          |
| Discount Amount                   | <p>The value of the discount given, based on the selected Discount Type</p><p><br>Example: IDR 50,000 for Flat, IDR 10,000 for 10% Percentage discount</p>                                                                                                                                                                                   |
| Max Discount Amount               | The maximum discount a customer can receive per transaction                                                                                                                                                                                                                                                                                  |
| Min Transaction Amount            | <p>The minimum transaction value required to apply the promo</p><p><br>Example: Promo only applies to purchases over IDR 100,000</p>                                                                                                                                                                                                         |
| Max Transaction Limit             | The total number of transactions across all users that can use this promo before it becomes inactive                                                                                                                                                                                                                                         |
| Max Transactions per Day          | The maximum number of promo redemptions allowed in a single day across all customers                                                                                                                                                                                                                                                         |
| Promo by SKU                      | Allows merchants to apply the promotion only to specific products identified by their SKU (Stock Keeping Unit). The promo will be validated only if the transaction includes one or more of the specified SKUs, matched via the `line_items` parameter in the DOKU Checkout API. Merchants can upload the SKU list using a provided template |

***

### Payment Details

|                              |                                                                                                                                                                                                                                                                                                                                                                                |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Field**                    | **Description**                                                                                                                                                                                                                                                                                                                                                                |
| Max Transactions per Account | The maximum number of times a single customer/account can redeem this promo                                                                                                                                                                                                                                                                                                    |
| Transaction Cycle            | The interval for evaluating limits per user (e.g., Daily, During Promo)                                                                                                                                                                                                                                                                                                        |
| Customer Identifier          | <p>The unique field used to track customer usage of the promo</p><p><br>Example: Email, Phone Number, Customer ID</p>                                                                                                                                                                                                                                                          |
| Payment Details              | <p>Allows the merchant to choose which payment methods are eligible for the promotion. Supported methods include Cards and e-Wallet. </p><p></p><p>For Cards payment method, merchants can apply the promo to all banks or restrict it to specific banks by uploading a list of BINs (Bank Identification Numbers)</p>                                                         |
| Custom Object Promo          | <p>Enables merchants to define custom conditions for promo eligibility using a combination of fields, operators, and values. These conditions allow for advanced targeting (e.g., customer type, platform, etc.)<br></p><p>When making a payment request via the DOKU Checkout API, merchants must include the parameter: <code>additional\_info.customObjectsPromo</code></p> |


# Manage Multiple Brands

Add and manage different brands under one Business Account

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only&#x20;
{% endhint %}

<figure><img src="/files/k5rJsfMQsd8ga7mkEWWY" alt=""><figcaption></figcaption></figure>

## Overview

Multi-brand is a feature in DOKU Dashboard that enables you to manage multiple brands or branches with a single business account. By activating Multi-brand, you will gain access to the [Company Dashboard](/get-started/manage-business/manage-multiple-brands/company-dashboard), where you can view transactions of all the registered brands easily. You can also add team members and assign them to their respective brand account and limit their access appropriately.

There are two primary cases where companies can use Multi-brand:

1. **Multiple Brands under One Entity:** This scenario applies to companies operating under a single legal entity while managing multiple distinct brands. For example, consider NULE, a company that owns three separate brands, each catering to different business lines: NULE Education for online courses, NULE Pay for online payments, and NULE Shop for e-commerce.
2. **Multiple Branches under One Entity:** In this case, a company operates multiple branches, each serving a different geographical location or market segment. For instance, NULE operates as a single school entity with branches in Jakarta, Bali, and Bandung.

{% hint style="warning" %}

### Multi-brand Usage Policy

Multi-brand is designed for a single business entity that operates multiple brands or branches **under the same legal entity**. If your brand is registered under a different business entity (i.e. a separate company), it will not be approved for activation. This is also not applicable for aggregator merchants.
{% endhint %}

***

## Activation

If you have not activated Multi-brand for your business account, you can do so by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Account** section, select **Business Info**
4. **Business Info** page will appear. Next, ensure that "Brand Information" tab is selected, then click "Add More Brand" button located on the right side of the page

   <figure><img src="/files/kh6eCwczVVw6ZDPZFM9s" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
If you do not see the "Add More Brand" button, this either means that (1) multi-brand has already been activated for your business account or (2) your business account type is not 'Corporate'.
{% endhint %}

5. A new page will appear where you are required to input the data of your new brand such as

   * Brand Name;
   * Brand Logo (optional);
   * Business Category;
     * Additional documents may need to be uploaded depending on the selected business category
   * Brand Description;
   * Projected TPT & TPV of the Brand;
   * Business Proof; and
   * Website or Social Media Links

   <figure><img src="/files/QqXnvCGbH5KhzRVaqiQR" alt=""><figcaption></figcaption></figure>
6. Agree to DOKU Terms and Conditions and Privacy Policy, then click "Add New Brand" to complete the Multi-brand activation.

Upon a successful Multi-brand activation, the following things will occur:

1. You will be granted a [Company Dashboard](/get-started/manage-business/manage-multiple-brands/company-dashboard), and your user account will gain a "Company Admin" role in the Company Dashboard.
2. You will gain access to a new Brand Dashboard, and your user account will gain "Admin" role in the new Brand Dashboard.

Although your new brand has been activated, it will undergo a verification process that may take up to 48 hours. During the verification period, your new brand account will not be able to receive settlement of funds until it has been verified. You can monitor the verification process by checking the status of your brand account. The following is a list of brand account status that you may find in the Company Dashboard:

* Draft → Brand account activation form has not been completed
* On Review → Brand account has been successfully activated, but it is in the process of verification
* Verified → Brand account has been verified

***

## FAQ

<details>

<summary>Why is the "Add More Brand" button missing from my page?</summary>

If you do not see the "Add More Brand" button, this either means that (1) multi-brand has already been activated for your business account or (2) your business account type is not 'Corporate'. If your business account type is 'Personal' or 'International', you are not eligible to activate multi-brand for your business account.

</details>

<details>

<summary>How long does it take for my new brand to be verified?</summary>

The verification process may take up to 48 hours.

</details>

<details>

<summary>Can I immediately start accepting payments for the new brand that I have just created?</summary>

Yes, once you have completed the registration for the new brand, you can immediately start accepting payments for that brand, but with a transaction limit. However, please note that the settlement of funds will be held until the brand has been verified.

</details>

<details>

<summary>What are the requirements to activate Multi-brand?</summary>

1. Your business account type has to be 'Corporate'.
2. If your new brand has a different line of business than your main brand, you are required to provide additional documents. The document requirements vary for each line of business. Please refer to [Activate Business](/get-started/activate-business#additional-requirements-for-specified-lines-of-business) for the full details.

</details>

<details>

<summary>Is there a limit to how many brands that I can create?</summary>

There is no limit to how many brands that you can create at the moment, however, please note that our team will verify every single brand that you will create and check its validity.

</details>

<details>

<summary>Is it possible to delete a brand that has been created?</summary>

It is not possible to delete a brand account once it has been created.

</details>

<details>

<summary>I have previously created two separate business accounts. Can I merge these two business accounts into one?</summary>

Yes, please contact your account manager or sales representative for this request. If you don't have an account manager, please fill and submit [this](https://www.doku.com/en-US/contact-sales?utm_source=docs) form. You may also [submit a support ticket](https://help.doku.com/en/support/tickets/new) or send an email to <care@doku.com> for assistance.

</details>

<details>

<summary>What should I do if I have an issue with the Multi-brand activation?</summary>

Please contact your account manager or sales representative for any issue that you may have. If you do not have an account manager, please fill and submit [this](https://www.doku.com/en-US/contact-sales?utm_source=docs) form. You may also [submit a support ticket](https://help.doku.com/en/support/tickets/new) or send an email to <care@doku.com> for assistance.

</details>


# Company Dashboard

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only
{% endhint %}

## Features

By activating Multi-brand, you will gain access to the [Company Dashboard](/get-started/manage-business/manage-multiple-brands/company-dashboard). Company Dashboard has the following features:

1. Navigation from one Brand Dashboard to another Brand Dashboard, and from a Brand Dashboard to a Company Dashboard
2. Ability to view transactions of all the registered brands&#x20;
3. Ability to assign and manage team members for each brand
4. Add more new brands to your business account

***

### Dashboard Navigation

<figure><img src="https://lh7-us.googleusercontent.com/h3y_growbKJM2yRbM2fLHH4GisIGhLfPNd5OUyPOlYWclI6nX2j1xmSkjJefWsHQoBciWgsSrbDFJfIe9SRckkoIDoW5OZtEyfudgwivKvHz4wCvHk8ZbElSqlruilnD-Da2slPb07v3-6FGf-NxgwnVqA=s2048" alt=""><figcaption></figcaption></figure>

You can navigate from a Brand Dashboard to a Company Dashboard or vice versa by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Click the ellipsis icon **( ⋮ )** next to your brand name
3. Select the dashboard that you would like to acccess.

{% hint style="info" %}
Company Dashboard has 'Company' text next to your business name, while Brand Dashboard only contains your brand name.
{% endhint %}

***

### View Transactions

<figure><img src="/files/J5UYODbABAlPyA8mr9kH" alt=""><figcaption></figcaption></figure>

You can view transactions from all of your registered brands by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Access your Company Dashboard
3. Select **Reports** from the menu, then choose **Transactions**
4. **Transactions** page will appear where you can view transactions for all of your registered brands. You can also filter to view transactions for certain brands only.

***

### Manage Team Members

You can manage team members for all of your registered brands by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Access your Company Dashboard
3. Select **Team Management** from the menu
4. **Team Management** page will appear, then click **Invite Team Member** button
5. Enter your team member's email address , select the designated brand account and assign the appropriate role
6. Complete Google reCAPTCHA, then click **SAVE** button.

{% hint style="info" %}
You can only invite other team members as a Company Admin.
{% endhint %}

***

### Add More Brands

You can add more brands for your business account by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Access your Company Dashboard
3. Select **Brand List** from the menu
4. **Brand List** page will appear, then click **Add New Brand** button
5. Brand registration form will appear where you are required to input the data of your new brand such as
   * Brand Name;
   * Brand Logo (optional);
   * Business Category;
   * Additional documents may need to be uploaded depending on the selected business category
   * Brand Description;
   * Projected TPT & TPV of the Brand;
   * Business Proof; and
   * Website or Social Media Links

<figure><img src="/files/QqXnvCGbH5KhzRVaqiQR" alt=""><figcaption></figcaption></figure>

6. Agree to DOKU Terms and Conditions and Privacy Policy, then click "Add New Brand" to add a new brand.

***

## FAQ

<details>

<summary>What roles are available in a Company Dashboard?</summary>

Unlike a Brand Dashboard, there are only two roles in a Company Dashboard. The following are those two roles and their capabilities:

1. Company Admin
   * Have access to transaction report page
   * Can add new brands
   * Can manage team members for all of the registered brands
2. Company Operation:&#x20;
   * Have access to transaction report page

</details>

<details>

<summary>Why is my Company Dashboard missing from the menu?</summary>

Please contact your account manager or sales representative for any issue that you may have. If you don't have an account manager, please fill and submit [this](https://www.doku.com/en-US/contact-sales?utm_source=docs) form. You may also [submit a support ticket](https://help.doku.com/en/support/tickets/new) or send an email to <care@doku.com> for assistance.

</details>


# Update Business Data

Edit your company profile, documents, and contact information

You can update your business data by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/account/business?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Account** section, select **Business Info**
4. **Business Info** page will appear where you can update your company data, business representative data, and brand data. The table below provides a complete overview of all the information you can update based on your Business Account type:

<table><thead><tr><th width="159">Data Type</th><th width="193">Corporate</th><th width="191">International </th><th>Personal</th></tr></thead><tbody><tr><td>Owner or Business Representative's Data</td><td><p>- Full Name</p><p>- Nationality</p><p>- Position</p><p>- Phone Number</p><p>- Email Address</p><p>- ID Card Number (KTP for Indonesian, KITAS for non-Indonesian)</p><p>- Passport</p></td><td><p>- Full Name</p><p>- Nationality</p><p>- Position</p><p>- Phone Number</p><p>- Email Address</p><p>- Passport</p></td><td><p>- Full Name</p><p>- Nationality</p><p>- Phone Number</p><p>- Email Address</p><p>- ID Card Number (KTP)<br>- Self Photo with ID Card</p></td></tr><tr><td>Business or Company Data</td><td><p>- Business Entity Name</p><p>- Business Type (e.g., PT, CV, PO, etc.)</p><p>- Phone Number</p><p>- Business Postal Code and Address</p><p>- Business Location Photo</p></td><td><p>- Business Entity Name</p><p>- Business Type (e.g., Pvt Ltd)</p><p>- Phone Number</p><p>- Business Postal Code and Address</p><p>- Business Location Photo</p></td><td>N/A</td></tr><tr><td>Brand Data</td><td><p>- Brand Name</p><p>- Line of Business</p><p>- Description</p><p>- Estimated TPT and TPV</p><p>- Social Media Links (Website, Facebook, Twitter, Instagram, App Store/Play Store)</p><p>Logo Brand</p></td><td><p>- Brand Name</p><p>- Line of Business</p><p>- Description</p><p>- Estimated TPT and TPV</p><p>- Social Media Links (Website, Facebook, Twitter, Instagram, App Store/Play Store)</p><p>Logo Brand</p></td><td><p>- Brand Name</p><p>- Line of Business</p><p>- Description</p><p>- Estimated TPT and TPV</p><p>- Social Media Links (Website, Facebook, Twitter, Instagram, App Store/Play Store)</p><p>Logo Brand</p></td></tr></tbody></table>

Next, if you wish to update your company's legal documents or reverify your Business Account, you may do so by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/account/business?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Account** section, select **Documents**
4. **Documents** page will appear where you can upload the company's latest legal documents. The table below provides a complete overview of all the documents you can update based on your Business Account type:

<table><thead><tr><th width="159">Data Type</th><th width="193">Corporate</th><th width="191">International </th><th>Personal</th></tr></thead><tbody><tr><td>Documents</td><td><p>- NIB (<em>Nomor Induk Berusaha</em>)</p><p>- <em>Akta Pendirian dan Perubahan Perusahaan</em></p><p>- <em>SK Kemenkumham dan Perubahan Perusahaan</em></p><p>- Business Proof Photo (Location/Activity/Product)</p><p>- NPWP (<em>Nomor Pokok Wajib Pajak</em>)</p></td><td><p>- Certificate of Incorporation / Business Registration Document</p><p>- Shareholder Structure</p><p>- Business License (related to the line of business)</p><p>- Bank Reference Letter</p></td><td>N/A</td></tr></tbody></table>

{% hint style="info" %}
Updating your business data would require us to re-verify your business account. Your new business data may be rejected if you fail to submit all the supporting documents for the change of your business data
{% endhint %}

***

## FAQ

<details>

<summary>Why is my Business Account suspended?</summary>

Your business account may be suspended due to a violation of the DOKU Terms of Services. If your business account is suspended, DOKU will notify you by email and provide a reason for the account suspension.

Please be sure to review [DOKU Terms and Conditions](https://dashboard.doku.com/doku-agreement/terms-and-conditions) prior to using our services.&#x20;

</details>

<details>

<summary>How do I know that my business data/documents are still being verified?</summary>

You will see a yellow banner below your selected data tab that says that your data is being verified. You can view the data changes as well by clicking "View Data Changes" button.&#x20;

</details>

<details>

<summary>How do I know that my business data/documents have been rejected?</summary>

You will see a red banner below your selected data tab that says that your data was rejected. You can view the rejected notes and the specific data that needs to be revised.

</details>

<details>

<summary>Can I submit the same data that was previously rejected?</summary>

Yes, if you persist that your data is correct, you can resubmit the same data for our risk team to reverify.&#x20;

</details>

<details>

<summary>Can I submit a new data while my data is being verified?</summary>

Yes, if you wish to revise your data, you can submit the new data for our risk team to verify. Please ensure the approval ID is different from the previous one in the yellow banner below your selected data tab.

</details>

<details>

<summary>My file/document is failed to be uploaded. What should I do?</summary>

Your file might fail to be uploaded due to the following reasons:

1. The file format is invalid
2. The file size is too big
3. The file is corrupted

Please ensure that your documents follow the below rules.

1. The file format is either PDF, PNG, JPG, or JPEG
2. The file size less than 15 MB
3. The file can be accessed and opened

</details>


# Manage User Account

Update your personal account details and security settings

## Overview

In this section, you will learn how to manage your User Account.&#x20;

1. [Change Password](/get-started/manage-user-account/change-password)
2. [Enable 2-Step Verification](/get-started/manage-user-account/enable-2-step-verification)

***

## My User Account Information

Your User Account Information can be found on **User Profile** page.

* **Name** - The registered name of your User Account.
* **Email ID** - The registered email address of your User Account.
* **Phone Number** - The registered phone number of your User Account.
* **Account Password** - The password that is used to register for your User Account.
* **Role** - The assigned user role within your Business Account (e.g., Admin, Finance, Operation, IT, or Customer Service).
* **Referral Code** - A unique referral code that you can share with others to invite them to DOKU.

***

## FAQ

<details>

<summary>What is the role of my User Account?</summary>

You can find the role of your user account by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. The role of your user account can be found at the bottom of the navigation bar,\
   below your user name.

</details>

<details>

<summary>How to use referral code?</summary>

If your receive a referral code from your sales representative or business partner, you can use the referral code during the [DOKU Business account registration](https://dashboard.doku.com/bo/register).&#x20;

The referral code box can be found at the bottom of the registration page.

</details>

<details>

<summary>Can I deactivate or delete my User Account?</summary>

Yes, you are free to delete your User Account without needing assistance from us. However, please note that only the User Account can be deleted — not the Business Account, as it is subject to compliance and regulatory retention policies.&#x20;

It’s also important to note that DOKU does not charge any fees for maintaining an active account. Fees are only applied to successful transactions.

</details>

<details>

<summary>How to delete my User Account?</summary>

If you wish to stop using DOKU services, you can delete your user account from DOKU Dashboard. Please note that deleting your account will **remove all of your user data permanently** and it cannot be recovered. You will also completely lose your access from the DOKU Dashboard.&#x20;

You can delete your DOKU Dashboard account by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Click the ellipsis icon **( ⋮ )** next to your user name from the menu, and then select **Profile** in the pop-up box
3. **User Profile** page will appear, then scroll down to the **Delete Account** section
4. Click **Delete Account**, then enter your PIN or an OTP to confirm account deletion.

{% hint style="warning" %}
Deleting your user account will not delete your business account.
{% endhint %}

</details>

<details>

<summary>Can I change the email address of my User Account?</summary>

It is not possible to change the email address associated with an existing User Account. If you would like to use different email address, you will need to create a new User Account. You can do this by simply inviting a new member using your new email address. Please refer to [Manage Team Members](/get-started/manage-business/manage-team-members#invite-team-members) for the detailed guide.

</details>

<details>

<summary>I forgot my email and phone number. How do I log in?</summary>

If you forget both your registered email and phone number, you can ask a team member to check the **Team Management** page. Your details (email and phone number) will be visible there, so you can use them to log in again.

</details>

<details>

<summary>I lost access to my email and phone number. How do I log in?</summary>

Your login options depend on which credentials you still have access to:

* If you lost access to your email but still have your phone number: You can log in with your phone number.
* If you lost both email and phone number: The only solution is to ask a team member with access to invite you again using your new email address. If no one else has access, you will need to create a new Business Account.

</details>


# Change Password

You can change your DOKU Dashboard password by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Click the ellipsis icon **( ⋮ )** next to your user name from the menu, and then select **Profile** in the pop-up box
3. **User Profile** page will appear, scroll down to the Change Password section, and then click **Change Password**&#x20;
4. Enter your current password and your new password

{% hint style="info" %}
You can't use the same previous passwords twice. The password must be at least 8 characters long with at least 1 uppercase, 1 lowercase, and 1 number.
{% endhint %}

5. Click **Change Password** once again to confirm your new password
6. You can now log in with your new password.

***

## FAQ

<details>

<summary>I forgot my password. How do I reset my password?</summary>

If you forgot your DOKU Dashboard password, you may reset your password by following the steps below:

1. Visit [DOKU Dashboard Login](https://dashboard.doku.com/bo/login) page
2. Click **Forgot Password?**
3. Input your email and click **RESEND EMAIL**
4. Check your inbox, and access the link in the email to reset password
5. Input your new password and submit the form

{% hint style="info" %}
You can't use the same previous passwords twice. The password must be at least 8 characters long with at least 1 uppercase, 1 lowercase, and 1 number.
{% endhint %}

6. You can now log in with your new password.

The same guide is applied for [DOKU Sandbox](https://sandbox.doku.com/bo/login).

</details>

<details>

<summary>I did not receive any email to reset my password. What should I do?</summary>

Please first ensure that the email address is correct. We will not be able to reset your password if the email address is invalid or is unregistered.

If you still have not received an email within 5 minutes, please [submit a support ticket](https://help.doku.com/en/support/tickets/new) or send an email to <care@doku.com>.

</details>


# Enable 2-Step Verification

2-Step Verification adds an extra layer of security to your account, ensuring that only authorized users can access and manage sensitive account information. By requiring two forms of authentication before entering DOKU Dashboard, this feature significantly reduces the risk of unauthorized access and fraudulent transactions, giving you peace of mind while conducting business online.

***

## Activation

You can activate 2-Step Verification for your account by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Click the ellipsis icon **( ⋮ )** next to your user name from the menu, and then select **Profile** in the pop-up box
3. On User Profile page, click “Enable 2-Step Verification” under 2-Step Verification section<br>

   <figure><img src="/files/YwlH4lfpC9BjGbSum6Vj" alt=""><figcaption></figcaption></figure>
4. A pop-up will appear, then enter a 6-digit verification code (OTP) that was sent to your email<br>

   <figure><img src="/files/6mnF1AymUE54uoMGlgQ2" alt=""><figcaption></figcaption></figure>
5. Upon a successful verification, a pop-up will appear, where you are required to create a 6-digit PIN for your account. PIN will be used to verify you before any critical changes are to be made<br>

   <figure><img src="/files/sxhtqNDYtKljlDvHcESV" alt=""><figcaption></figcaption></figure>
6. Confirm your PIN to enable 2-Step Verification<br>

   <figure><img src="/files/EnEch2ihuxXHocjUvEm0" alt=""><figcaption></figcaption></figure>
7. 2-Step Verification has been enabled<br>

   <figure><img src="/files/hfgTjgyVC97yT2d8k1ep" alt=""><figcaption></figcaption></figure>

You can add other authentication methods such as SMS, where verification code will be sent to your phone number, and Authenticator App, where verification code will be verified based on the verification code that was generated from apps such as Google Authenticator, Microsoft Authenticator, and other authenticator apps.

***

## Login

Once you have 2-Step Verification enabled, you will be required to enter your email and password as well as a verification code before successfully logging in to DOKU Dashboard. The following flow illustrates how you will be asked for a verification code upon login:

1. Open [DOKU Dashboard Login](https://dashboard.doku.com/bo/login) page, and enter your email and password<br>

   <figure><img src="/files/Gn8vxEOnvXBWReiphqFx" alt=""><figcaption></figcaption></figure>
2. A pop-up will appear, where you can select your choice of 2-Step Verification based on the authentication method that you have enabled<br>

   <figure><img src="/files/BKgmg42cWZx7V7X1LIAH" alt=""><figcaption></figcaption></figure>
3. After selecting an authentication method, enter a 6-digit verification code according to your selection of authentication method<br>

   <figure><img src="/files/4VdxeeiWk3GTN11F1CkO" alt=""><figcaption></figcaption></figure>
4. Upon a successful code verification, you will redirected to the home page of DOKU Dashboard<br>

   <figure><img src="/files/6YXym2uyWZbqBTBjHx3K" alt=""><figcaption></figcaption></figure>

***

## Security Check Events

Security check events refer to situations where DOKU prompt users to verify their identity by entering their PIN before proceeding with a particular action or accessing certain information. One example of a security check event is deactivating a service. The following flow illustrates how you will be asked for a PIN upon deactivating a service:

1. Upon successful login to [DOKU Dashboard](https://dashboard.doku.com/bo/login), select **Settings** from the menu
2. **Settings** page will appear. Under **Account** section, select **Service**
3. **Service** page will appear, then select a service to deactivate (for instance, Virtual Account) and click **Deactivate**
4. A confirmation box will appear, click **Deactivate** once again to confirm service deactivation<br>

   <figure><img src="/files/IDhWss67wV4LMntnRXDU" alt=""><figcaption></figcaption></figure>
5. A pop-up box will appear, where you are required to enter your PIN before you can proceed to deactivate the service you selected<br>

   <figure><img src="/files/omLwxBosRgMJwJ6DwsWD" alt=""><figcaption></figcaption></figure>
6. An invalid PIN verification will prevent you from deactivating the service<br>

   <figure><img src="/files/1SCKOBawdzp4Yt0Wp0zT" alt=""><figcaption></figcaption></figure>
7. Upon a successful PIN verification, the service will be deactivated and removed from the service list

***

## Member Activation Request

In order to thoroughly protect your business account, it is recommended that all team members have 2-Step Verification active. You can request other members to activate their 2-Step Verification by following the steps below: &#x20;

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Team & Security** section, select **Team Management**
4. On **Team Management** page, select a member to request 2-Step Verification by clicking the edit icon on the right side of the page<br>

   <figure><img src="/files/JOTtosREFMfYFa01NQc4" alt=""><figcaption></figcaption></figure>
5. A pop-up box will appear, then click **Request 2-Step Verification** located next to the Security column<br>

   <figure><img src="/files/sZDUBMvBzQe9Rp5nCbWQ" alt=""><figcaption></figcaption></figure>
6. An email notification will be sent to the team member that you selected for the 2-Step Verification request

Upon the team member's next login attempt, the team member will be prompted to enable 2-Step Verification for their account before successfully logging in to DOKU Dashboard.

<figure><img src="/files/bm3DvQQzWXn4SFk7dS50" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/xrqJywpiFEhVCQKtrtNu" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Only User accounts with 'Admin' role are enabled to request other members to activate their 2-Step Verification
{% endhint %}

***

## FAQ

<details>

<summary>What authentication methods are supported for the 2-step verification?</summary>

At the moment, we support authentication methods via email, SMS, and authenticator apps such as Google Authenticator and Microsoft Authenticator.

</details>

<details>

<summary>Can I activate more than one authentication method?</summary>

You can activate up to 3 authentication methods, and you can select your prefered method of authentication during login.

</details>

<details>

<summary>What should I do if I lose access to my primary authentication method?</summary>

Please [submit a support ticket](https://help.doku.com/en/support/tickets/new) or send an email to <care@doku.com>, and we will help to recover your account.

</details>

<details>

<summary>Can I disable 2-step verification once it's been enabled?</summary>

Yes, but you are only allowed to disable 2-step verification up to 2 times a day for security reasons. You can disable the 2-step verification for your account by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Click the ellipsis icon **( ⋮ )** next to your user name from the menu, and then select **Profile** in the pop-up box
3. On User Profile page, click “Disable 2-Step Verification” under 2-Step Verification section
4. A pop-up will appear, click "Disable 2-Step Verification" one more time to confirm, then enter a 6-digit verification code (OTP) that was sent to your email
5. Upon a successful verification, 2-step verification for your account will be disabled.

</details>


# Supported Products by Region

## Products / Features

| Product / Feature                 | Indonesia      | Malaysia       |
| --------------------------------- | -------------- | -------------- |
| Payment Link                      | ✅ Available    | ✅ Available    |
| Digital Catalog                   | ✅ Available    | ✅ Available    |
| QRIS                              | ✅ Available    | 🚫 Unavailable |
| Customer Static Virtual Account   | ✅ Available    | 🚫 Unavailable |
| Promo Engine                      | ✅ Available    | 🚫 Unavailable |
| PayChat                           | ✅ Available    | 🚫 Unavailable |
| Multi-brand                       | ✅ Available    | 🚫 Unavailable |
| Virtual Terminal                  | ✅ Available    | 🚫 Unavailable |
| 2-Step Verification               | ✅ Available    | ✅ Available    |
| Split Settlement                  | ✅ Available    | 🚫 Unavailable |
| Hold and Release                  | ✅ Available    | 🚫 Unavailable |
| Custom Settlement Report          | ✅ Available    | 🚫 Unavailable |
| DOKU Checkout                     | ✅ Available    | ✅ Available    |
| Direct API                        | ✅ Available    | ✅ Available    |
| Plugin - Shopify                  | ✅ Available    | ✅ Available    |
| Plugin - WooCommerce              | ✅ Available    | ✅ Available    |
| Plugin - Adobe Commerce (Magento) | ✅ Available    | ✅ Available    |
| Plugin - WIX                      | 🚫 Unavailable | ✅ Available    |
| SDK                               | ✅ Available    | 🚫 Unavailable |
| DOKU MCP                          | ✅ Available    | 🚫 Unavailable |
| Domestic Payouts                  | ✅ Available    | 🚫 Unavailable |
| Cash Out                          | ✅ Available    | 🚫 Unavailable |
| Wallet as a Service               | ✅ Available    | 🚫 Unavailable |
| Sub-Account                       | ✅ Available    | 🚫 Unavailable |
| Juragan DOKU (Mobile App)         | ✅ Available    | 🚫 Unavailable |
| DOKU e-Wallet (Mobile App)        | ✅ Available    | 🚫 Unavailable |
| Partner API                       | ✅ Available    | 🚫 Unavailable |
| Direct Transfer                   | ✅ Available    | 🚫 Unavailable |
| Visa Token Service                | ✅ Available    | 🚫 Unavailable |
| Rekening Dana Lender              | ✅ Available    | 🚫 Unavailable |
| Automatic Billing Updater         | ✅ Available    | 🚫 Unavailable |

***

## Payment Methods

<table><thead><tr><th width="303.16668701171875">Payment Method</th><th>Indonesia</th><th>Malaysia</th></tr></thead><tbody><tr><td>Cards</td><td>✅ Supported</td><td><p>

✅ Supported<br>- OCBC Bank</p><p>

</p></td></tr><tr><td>CC Installment</td><td>✅ Supported</td><td>✅ Supported</td></tr><tr><td>FPX Online Banking</td><td>🚫 Unavailable</td><td>✅ Supported</td></tr><tr><td>Kartu Kredit Indonesia (GPN)</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>Virtual Account (Bank Transfer)</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>DOKU e-Wallet</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>OVO</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>ShopeePay</td><td>✅ Supported</td><td>✅ Supported</td></tr><tr><td>GrabPay</td><td>🚫 Unavailable</td><td>✅ Supported</td></tr><tr><td>LinkAja</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>DANA</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>i.saku</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>Touch 'n Go</td><td>🚫 Unavailable</td><td>✅ Supported</td></tr><tr><td>Boost</td><td>🚫 Unavailable</td><td><strong>🔜</strong> Coming Soon</td></tr><tr><td>Shopback</td><td>🚫 Unavailable</td><td><strong>🔜</strong> Coming Soon</td></tr><tr><td>QRIS</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>Akulaku</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>Kredivo</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>Indodana</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>PayLater by Grab</td><td>🚫 Unavailable</td><td>✅ Supported</td></tr><tr><td>SPayLater</td><td>✅ Supported</td><td>✅ Supported</td></tr><tr><td>Atome</td><td>🚫 Unavailable</td><td><strong>🔜</strong> Coming Soon</td></tr><tr><td>Alfa Group</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>Indomaret</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>Direct Debit CIMB</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>Direct Debit Allobank</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>Direct Debit Mandiri</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>Jenius Pay</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>BRImo e-Payment</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>Internet Banking Muamalat</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>OCTO Clicks</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>Danamon Online Banking</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr><tr><td>PermataNet</td><td>✅ Supported</td><td>🚫 Unavailable</td></tr></tbody></table>


# No-Integration Products

Accept payments fast and easy without any technical integration

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Payment Link</strong></td><td>Create a link that you can use to collect payments from your customers</td><td></td><td><a href="/files/p9j5N5m45zzcpQ3OxLFM">/files/p9j5N5m45zzcpQ3OxLFM</a></td><td><a href="/pages/lVNJzWvjnghExfZC1X3x">/pages/lVNJzWvjnghExfZC1X3x</a></td></tr><tr><td><strong>Digital Catalog</strong></td><td>Create an online catalog to showcase your products</td><td></td><td><a href="/files/huiAemQftqfMczMvHQDQ">/files/huiAemQftqfMczMvHQDQ</a></td><td><a href="/pages/tDAJiETusjMaYEArx6z9">/pages/tDAJiETusjMaYEArx6z9</a></td></tr><tr><td><strong>QRIS</strong></td><td>Create a static or dynamic QR code to easily collect payments</td><td></td><td><a href="/files/KyLjLZcd8awkvvTsbFJK">/files/KyLjLZcd8awkvvTsbFJK</a></td><td><a href="/pages/efJG2TzOrz6lSQFEBY9V">/pages/efJG2TzOrz6lSQFEBY9V</a></td></tr><tr><td><strong>Customer Static VA</strong></td><td>Reusable virtual account number assigned to a customer that can be used for multiple payments</td><td></td><td></td><td><a href="/pages/Y7tcKpvRfebyCtZ0Cjt1">/pages/Y7tcKpvRfebyCtZ0Cjt1</a></td></tr><tr><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>


# Payment Link

Create a link instantly to collect payments from your customers

<figure><img src="/files/iTvw5X13DNugvPlN0uRi" alt=""><figcaption></figcaption></figure>

## Overview

**Payment Link** enables merchants to accept payments by simply creating and sharing a link to customers via email, messaging apps, social media, or any online platform — no website, app, or coding required. Payment Link can be generated through 3 platforms:

1. Website via [DOKU Dashboard](https://dashboard.doku.com/bo/payment-link?utm_source=docs)
2. Mobile app via [Juragan DOKU](/mobile-apps/juragan-doku#installation)\
   :information\_source:<sub>Only available for Indonesian Business Accounts</sub>
3. Social messaging app via WhatsApp\
   :information\_source:<sub>Only available for Indonesian Business Accounts</sub>

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Create Payment Link</strong></td><td>Quickly accept payments in 3 easy steps</td><td><a href="/pages/id4YTvtHCVY67JDe5PBV">/pages/id4YTvtHCVY67JDe5PBV</a></td></tr><tr><td><strong>Manage Payment Link</strong></td><td>Track payment status, send notification, and manage payment link report  </td><td><a href="/pages/dlzjj7HbFIuGC6ZMYfeS">/pages/dlzjj7HbFIuGC6ZMYfeS</a></td></tr></tbody></table>

### Link Types

{% tabs %}
{% tab title="Single Payment Link" %}
**Single Payment Link** is used to collect one-time or recurring (partial) payments from a specific customer. Once full payment has been made, the link can no longer be used to accept payments and becomes inaccessible. It is ideal for sending invoices for products or services sold to individual customers.

Single Payment Link cannot be reused after payment completion, but you can duplicate and edit the link for other customers.
{% endtab %}

{% tab title="Multiple Payment Link" %}
**Multiple Payment Link** is used to collect several payments using the same link. It is ideal for businesses that sell identical products or services to multiple customers.

The link remains active and reusable until it reaches its specified expiration date or transaction usage limit. Merchants can configure a transaction limit per link or allow unlimited transactions based on their business needs.
{% endtab %}
{% endtabs %}

|                                   | Single Payment Link                                                                   | Multiple Payment Link                                                                 |
| --------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| Description                       | Used for collecting one-time or recurring (partial) payments from a specific customer | Used for selling a product, a service, or accepting donations from multiple customers |
| Customer                          | Specific individuals or businesses                                                    | Multiple individuals or businesses (anyone with the link)                             |
| Reusability                       | Cannot be reused after full payment; can be duplicated and edited for a new customer  | Reusable until expiration or usage limit is reached                                   |
| Use Cases                         | Sending invoices of a product/service to a single customer                            | Selling products/services to multiple customers; fundraising or mass sales            |
| Partial Payments or Payment Plans | ✅ Supported                                                                           | ❌ Not Supported                                                                       |
| Promo/Discounts                   | ✅ Supported                                                                           | ✅ Supported                                                                           |
| Create from Website               | ✅ Supported                                                                           | ✅ Supported                                                                           |
| Create from Mobile App            | ✅ Supported                                                                           | ✅ Supported                                                                           |
| Create from WhatsApp              | ✅ Supported                                                                           | ✅ Supported                                                                           |

### Order Types

{% tabs %}
{% tab title="Amount & Description" %}
**Amount & Description**: Merchants create a Payment Link by entering the payment amount and a description of the product or service. Customers simply review the preset information and complete the payment without modifying any details.
{% endtab %}

{% tab title="Items & Amount" %}
**Items & Amount:** Merchants define multiple products or services with assigned quantities and prices. Customers can select one or more items and adjust the quantity during checkout, based on the available limits set by the merchant.
{% endtab %}

{% tab title="Accept Any Amount" %}
**Accept Any Amount:** Merchants create a Payment Link where customers are free to decide the amount they want to pay. Only a description is preset; no amount is fixed in advance.
{% endtab %}
{% endtabs %}

|                                     | Amount & Description                                                                                                                                     | Items & Amount                                                                                                                              | Accept Any Amount                                                                                                      |
| ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| Description                         | Simple payment by entering only the amount and description                                                                                               | Input multiple products/services with quantity and price breakdown shown at checkout                                                        | Yes, by deciding the amount to be paid.                                                                                |
| Customers Choose What to Pay (PWYW) | Yes, with Partial Payments                                                                                                                               | Yes, by selecting quantity of products/services                                                                                             | Yes, by deciding the amount to be paid                                                                                 |
| Set Minimum and Maximum Amount      | Yes, with Partial Payments                                                                                                                               | Yes, by setting minimum/maximum quantity for each product/service                                                                           | No, freely entered by customers                                                                                        |
| Use Cases                           | Professional services (e.g., consulting fees, legal services, design work), subscription invoicing with fixed pricing, single project or service billing | Online stores offering multiple products, service packages with optional add-ons, order-based businesses such as catering or event services | Donation campaigns, crowdfunding, charity fundraising, tipping systems, membership contributions with flexible amounts |
| Single Payment Link                 | ✅ Supported                                                                                                                                              | ✅ Supported                                                                                                                                 | ✅ Supported                                                                                                            |
| Multiple Payment Link               | ✅ Supported                                                                                                                                              | ✅ Supported                                                                                                                                 | ✅ Supported                                                                                                            |
| Create from Website                 | ✅ Supported                                                                                                                                              | ✅ Supported                                                                                                                                 | ✅ Supported                                                                                                            |
| Create from Mobile App              | ✅ Supported                                                                                                                                              | ✅ Supported                                                                                                                                 | ❌ Not Supported                                                                                                        |
| Create from WhatsApp                | ✅ Supported                                                                                                                                              | ✅ Supported                                                                                                                                 | ❌ Not Supported                                                                                                        |

### Customer Info Types

{% tabs %}
{% tab title="Collect Customer" %}
**Collect Customer:** Merchants can specify required customer details such as name, email, telephone number, and address. Customers input this information before completing their payment. This method is ideal for merchants who need customer data for transaction tracking or record keeping.
{% endtab %}

{% tab title="Select Customer" %}
**Select Customer:** Merchants can select from previously registered customers or add new customer information manually when creating a Payment Link. This option is suitable for invoicing or billing scenarios where the merchant manages a customer database and needs to associate transactions with specific customers.
{% endtab %}
{% endtabs %}

|                                   | Collect Customer                                                                                          | Select Customer                                                                                      |
| --------------------------------- | --------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| Description                       | Customers input their personal information (name, email, phone number, address) before completing payment | Merchants select existing registered customers or add new customer data during Payment Link creation |
| Use Cases                         | Fast creation of Payment Links while still collecting basic customer information for tracking and reports | Ideal for invoicing or billing existing customers, enabling better transaction history management    |
| Partial Payments or Payment Plans | ❌ Not Supported                                                                                           | ✅ Supported                                                                                          |
| Single Payment Link               | ✅ Supported                                                                                               | ✅ Supported                                                                                          |
| Multiple Payment Link             | ✅ Supported                                                                                               | ❌ Not Supported                                                                                      |
| Create from Website               | ✅ Supported                                                                                               | ✅ Supported                                                                                          |
| Create from Mobile App            | ✅ Supported                                                                                               | ✅ Supported                                                                                          |
| Create from WhatsApp              | ✅ Supported                                                                                               | ✅ Supported                                                                                          |

### Creation Methods

{% tabs %}
{% tab title="Single Creation" %}
**Single Creation**: Create one Payment Link at a time through the DOKU Dashboard or Juragan DOKU mobile app. This method is suitable for fast payment requests where only one transaction needs to be processed.
{% endtab %}

{% tab title="Bulk Creation" %}
**Bulk Creation**: Generate multiple Payment Links at once by uploading an XLSX file through the DOKU Dashboard. This streamlines mass link creation for merchants handling large customer bases.
{% endtab %}
{% endtabs %}

|                                   | Single Creation                                                     | Bulk Creation                                                              |
| --------------------------------- | ------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| Description                       | Create a Payment Link one at a time via the Dashboard or mobile app | Generate multiple Payment Links at once by uploading an XLSX file template |
| Use Cases                         | Suitable for fast, one-off payment requests                         | Suitable for mass invoicing                                                |
| Amount & Description              | ✅ Supported                                                         | ✅ Supported                                                                |
| Items & Amount                    | ✅ Supported                                                         | ✅ Supported                                                                |
| Accept Any Amount                 | ✅ Supported                                                         | ❌ Not Supported                                                            |
| Partial Payments or Payment Plans | ✅ Supported                                                         | ✅ Supported                                                                |
| Single Payment Link               | ✅ Supported                                                         | ✅ Supported                                                                |
| Multiple Payment Link             | ✅ Supported                                                         | ❌ Not Supported                                                            |
| Create from Website               | ✅ Supported                                                         | ✅ Supported                                                                |
| Create from Mobile App            | ✅ Supported                                                         | ❌ Not Supported                                                            |
| Create from WhatsApp              | ✅ Supported                                                         | ❌ Not Supported                                                            |

***

## Key Features

| Feature                      | Description                                                                                                                                    | Benefits                                                                                                                                                                         | Use Case                                                                                                                                                                     |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Email Notification**       | Automatically send email notifications when a Payment Link is created, nearly expired, expired, or successfully paid                           | Keeps both merchants and customers informed at critical stages, reducing missed payments and confusion                                                                           | Merchants reminding customers before a link expires; confirming successful payments immediately via email; reducing the need for manual follow-ups                           |
| **Expiry Extension**         | Allow customers to complete a payment after the Payment Link has reached its expiration date                                                   | Increases flexibility for customers and reduces missed payments due to link expiration. Helps merchants recover potential lost transactions without manually creating a new link | Customers who missed the payment deadline but still wish to complete their purchase without requiring merchants to manually create a new Payment Link                        |
| **Custom Link**              | Personalize the Payment Link URL (e.g., `pay.doku.com/YogaSerenity`) to reinforce brand identity and make links more memorable and trustworthy | Increases brand recognition, builds customer trust, and makes URLs easier to share and remember                                                                                  | Sell event tickets with a branded link like `pay.doku.com/SummerFestival`; collect payments for online classes via a recognizable branded link                               |
| **Custom Field**             | Add additional input fields during checkout to collect customer-specific information beyond standard payment details                           | Enables merchants to gather detailed data for operations, reporting, or fulfillment                                                                                              | Schools collecting Student ID numbers; restaurants collecting special meal requests; service providers asking for preferred appointment times                                |
| **Custom Note**              | Add a footnote on the checkout page with extra instructions or important information                                                           | Helps manage customer expectations and reduces post-payment inquiries                                                                                                            | Online stores providing refund policies; service businesses providing next steps after payment confirmation                                                                  |
| **Success Page Redirection** | Redirect customers to a specified URL after successful payment completion                                                                      | Enhances customer experience and supports marketing follow-ups or digital product delivery                                                                                       | Redirect customers to a download page for e-tickets, a WhatsApp conversation starter link, a "Thank You" page, or a loyalty program enrollment page after successful payment |
| **Attachments**              | Allow customers to download files (invoices, catalogs, contracts) uploaded by the merchant on the checkout page                                | Centralizes communication and ensures customers receive essential information before payment                                                                                     | Merchants sending product catalogs with order forms; service providers attaching terms and conditions; schools sharing tuition fee breakdowns                                |
| **Partial Payments**         | Allow customers to pay in installments using a single Payment Link; set minimum payment amounts if needed                                      | Improves affordability for customers; increases transaction success for large payments                                                                                           | Schools collecting tuition fees monthly; merchants accepting down payments for made-to-order goods                                                                           |

***

## Use Cases

{% tabs %}
{% tab title="Invoice Payments" %}
Businesses can embed Payment Links in invoices sent via email or messaging apps to simplify payment collection from clients.

Useful DOKU Features:

* **Single Payment Link** (for specific invoice collection)
* **Amount & Description** (customized for invoice details)
* **Partial Payments** (allow installment or progressive payments)
* **Bulk Creation** (allow mass invoicing)
* **Custom Fields** (capture client reference numbers, project codes)
* **Attachments** (attach detailed invoices or contracts)
  {% endtab %}

{% tab title="Event Bookings" %}
Event organizers can issue Payment Links for participants to register for workshops, conferences, or webinars.

Useful DOKU Features:

* **Single or Multiple Payment Link** (based on event type)
* **Amount & Description** (simple event payment setup)
* **Items & Amount** (sell different ticket types: VIP, Regular, Group Packages)
* **Collect Customer** (collect attendee details)
* **Custom Field** (collect seat preference, meal selection, T-shirt size, or special instructions)
* **Success Page Redirection** (redirect customers to download e-tickets or event info page)
* **Custom Link** (create branded event payment pages, e.g., `pay.doku.com/SummerFestival`)
  {% endtab %}

{% tab title="Pre-orders and Deposits" %}
Merchants selling items on a pre-order basis (e.g., gadgets, fashion collections, handmade products) can use Payment Links to collect reservation fees or deposits securely before the product launch.

Useful DOKU Features:

* **Single Payment Link** (for specific invoice collection)
* **Amount & Description** (customized for invoice details)
* **Items & Amount** (list multiple pre-order items with quantity limits)
* **Partial Payments** (allow installment or progressive payments)
* **Bulk Creation** (allow mass invoicing)
  {% endtab %}

{% tab title="Fundraising & Donations" %}
Non-profits and community groups can share Payment Links widely to collect contributions.

Useful DOKU Features:

* **Multiple Payment Link** (share link with unlimited donors)
* **Accept Any Amount** (allow donors to choose the contribution amount)
* **Collect Customer** (depending on donor privacy requirements)
* **Custom Fields** (capture donor names, dedications, or messages)
  {% endtab %}
  {% endtabs %}

***

## FAQ

<details>

<summary>Is there a maximum number of Payment Links I can create?</summary>

No. You can create as many Payment Links as you need without any limit.

</details>

<details>

<summary>What is the cost to create a Payment Link?</summary>

Creating a Payment Link on DOKU is free of charge. Standard transaction fees apply based on the activated payment methods.

</details>

<details>

<summary>Can I accept international payments with Payment Link?</summary>

Yes. You must activate **Cards** payment method to accept international payments.

</details>

<details>

<summary>How to check if Payment Link has been paid?</summary>

For a **Single Payment Link**, the status will automatically change to **Paid** once full payment is received.

For a **Multiple Payment Link**, payment status can be tracked in the **Transaction List** section on the Payment Link Detail page.

</details>

<details>

<summary>Can my Payment Link be paid in the wrong amount?</summary>

The payable amount depends on the order type of the Payment Link:

* **Fixed/closed amount:** The payer can only complete the transaction with the exact amount you set, so incorrect amounts are not possible. This includes amount & description and items & amount&#x20;
* **Flexible amount:** The payer can enter their own amount. In this case, the amount may differ from what you expect, but it is not considered “wrong” since you allowed flexible payments. This includes accept any amount & partial payments.

</details>

<details>

<summary>Can I customize the checkout page of my Payment Link?</summary>

Yes. You can customize the Checkout page of your Payment Link by following the guide on [Customize Checkout Page](/accept-payments/no-integration-products/payment-link/customize-checkout-page). However, please note that only Checkout page is customizable, not the Payment Link page.

</details>

<details>

<summary>How many times can I accept payments with one Multiple Payment Link?</summary>

By default, a Multiple Payment Link can accept an unlimited number of payments. You also have the option to set a specific limit on the total number of payments allowed via the link.

</details>


# Create Payment Link

Generate payment links from a web dashboard, mobile app, or WhatsApp

Payment Link can be created from 3 different platforms:

* [#doku-dashboard](#doku-dashboard "mention") (via Web Browser)
* [#juragan-doku](#juragan-doku "mention") (via Mobile App)
* [#whatsapp](#whatsapp "mention") (via Messaging App)

## DOKU Dashboard

Merchant can create Payment Link in 2 ways from DOKU Dashboard:

1. [#single-creation](#single-creation "mention")
2. [#bulk-creation](#bulk-creation "mention")

### Single Creation

You can generate a Payment Link via DOKU Dashboard by following the steps below:

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Navigate to **Accept Payments** > **Payment Link**
3. Click **Create Payment Link**
4. On **Create Payment Link** page, complete the following sections:

{% tabs %}
{% tab title="Order Details" %}

<figure><img src="/files/9KxT39E26zT9zfg1jEJ1" alt="" width="563"><figcaption><p>Order Details Section</p></figcaption></figure>

**Order Details** section consists of 3 components:

1. **Order Type (Amount Type)**
   1. **Set Amount or Product:** \
      Customers must pay the amount that you have set, suitable for invoice payments.
   2. **Accept Any Amount:** \
      Customers are free to enter any amount they wish to pay, suitable for donations or flexible billing.
2. **Details Type**
   1. **Payment Description:** \
      Allows merchants to specify a fixed amount and a short description to describe the purpose of the payment. This is useful for general payments (e.g., service fees, consultation charges, invoices). Customers will only see amount and description on the Payment Link page.
   2. **Add Item:** \
      Allows merchants to add one or more items in the payment link. This is useful for quick payment with items/services. Merchants can configure item details for the payment link by specifying the item name, quantity, and price per item. They can also set a minimum and maximum quantity to control how many units a customer can purchase.&#x20;
3. **Order Number**
   * Allows merchants to set a custom invoice or reference number for each payment link. This identifier helps merchants track transactions more easily inside the dashboard.&#x20;
   * It is optional and can be left blank if not needed when it is used it can be any unique value meaningful to the merchant, such as booking number, or customer reference.
     {% endtab %}

{% tab title="Customer Details" %}

<figure><img src="/files/jfd97iL0LnKK25jHxr4E" alt="" width="563"><figcaption><p>Customer Details</p></figcaption></figure>

**Customer Details** section consists of 2 components:

1. **Collect Customer Information**
   * Allows merchants to collect customer details at the time of payment, where merchants can set which information to collect from the customer.
   * Merchant can collect the following information
     1. Name (Required)
     2. Email
     3. Phone Number
     4. Address
2. **Select Customer**
   * Allows merchants to link the transaction to an existing customer from the customer list. This is ideal for repeat customer or when the merchant already has the customer profile.&#x20;

> **Additional Option:**
>
> Merchants can also **add a new customer** if the customer does not yet exist in the list.&#x20;
> {% endtab %}

{% tab title="Payment Details" %}

<figure><img src="/files/0XV1knTjCqiICh0OyaAU" alt=""><figcaption></figcaption></figure>

**Payment Details** section consists of 4 components:

1. **Expiry Date**
   * Allows merchants to set an expiration date and time for the payment link. Once expired, the link becomes inactive and cannot be used for payment.&#x20;
   * Expiry date can be set to the following options: Tomorrow, 7 Days, 14 Days, Custom (Set the Date and Time manually).
2. **Expiry Extension**
   * Allows merchants to enable customers to extend the validity of a payment link after it expires. When the payment link reaches its expiry date, the customer will receive an email with the option to extend the link’s validity based on the settings configured by the merchant.
3. **Allow Multiple Payments**
   * Enables merchants to collect multiple payments using the same payment link. This is useful for scenarios such as receiving payments from different customers (e.g., event fees) or repeated transactions from the same customer.&#x20;
   * Merchants can set a limit on how many times the payment link can be used. When this feature is active, certain features will be disabled as indicated in the table below.
4. **Allow Partial Payments**
   * Enables merchants to accept payments in installments through a single payment link. This is useful for flexible billing arrangement or customer that needs more time to complete their payment.
   * Merchants can set a minimum payment amount based on their preferences. When this feature is active, certain features will be disabled as indicated in the table below.

<table><thead><tr><th width="226.33074951171875">Active</th><th>Disabled</th></tr></thead><tbody><tr><td>Allow Multiple Payment</td><td><ul><li>Enable Expiry Extension</li><li>Allow Partial Payments</li></ul></td></tr><tr><td>Allow Partial Payments</td><td><ul><li>Enable Expiry Extension</li><li>Allow Multiple Payments</li></ul></td></tr></tbody></table>
{% endtab %}

{% tab title="Additional Details" %}

<figure><img src="/files/CFir2lBUOLBTNpJky9ih" alt=""><figcaption></figcaption></figure>

**Additional Details** consist of 5 components:

1. **Custom Payment Link**
   * Allows merchants to personalize the URL of a payment link to make it more recognizable, branded, or easier to share. Instead of using a system-generated link, merchants can define the custom suffix of the payment link (e.g., `pay.doku.com/p-link/p/myLink10`).
   * Merchants are allowed to create up to 10 custom links per month. Quota resets on the first day of every month.
2. **Custom Note**
   * Allows merchants to add a personalized footnote at the bottom of the payment page. This section supports rich text formatting, enabling merchants to include styled messages, or instructions as needed.
   * Custom notes can be used to include a thank-you message and contact information for customer assistance. This message will be visible to the customer during the payment process, at the bottom of the payment page.

> Thank you for your payment! For support, contact us at <support@yourbrand.com> or visit our Help Center.

3. **Custom Fields**
   * Allows merchants to add personalized input fields to the payment page, enabling them to collect specific information from customers during the payment process. Merchants can define the type, label, and options for each field based on their business needs.
   * Merchants can create up to two custom fields, which can be configured as optional or mandatory for customers to fill in during the payment process.
   * Supported field types are as follows:
     * **Text** – use case examples: *Recipient Name*, *Member Code*
     * **Number** – use case examples: *Membership Number*, *Student Number*
     * **Email** – accepts entries in **email format**
     * **URL** – use case examples: *Portfolio Website*
     * **Single Selection** – dropdown with one selectable option (e.g., *Choose Package Tier*, *Choose Time Slot*)
     * **Multiple Selection** – dropdown with multiple selectable options (e.g., *Select Add-ons* or *Preferences*)
4. **Attachments**
   * Attachment feature allows merchants to upload one or more files that will be displayed and made available for download on the customer’s payment page. This is useful for sharing documents, instructions, invoices or reference materials related to the payment.
   * Attachment guidelines are as follows:
     1. Maximum file size : 15MB
     2. File Format : PDF, JPG, JPEG, PNG
5. **Success Page URL (Success Redirect URL)**
   * Allows merchants to define a custom web page where customers will be redirected after completing a successful payment. This page can be used to confirm the transaction, thank the customer, or provide next steps (e.g., access to a service, download link, or order tracking).
     {% endtab %}

{% tab title="SST" %}
{% hint style="info" %}
Only available for Malaysian Business Account
{% endhint %}

<figure><img src="/files/uolQ0J5AWapzRAjcmzki" alt="" width="349"><figcaption></figcaption></figure>

Apply SST to the payment amount when required. By default, the SST rate is **6%**, but you can adjust the percentage as needed. When enabled, the SST amount is automatically calculated and included in the customer's total payment. SST is optional and can be enabled or disabled for each payment link.
{% endtab %}
{% endtabs %}

5. **Click** **Create Payment Link**.

   Once created, **copy** the Payment Link and **share** it with your customers via WhatsApp, Email, or other preferred channels.

### Bulk Creation

Bulk Payment Link enables merchants to generate multiple Payment Links at once by uploading a spreadsheet. This is ideal for handling large batches of payments, such as billing multiple customers or sending out mass invoices. Bulk payment link use cases, mass billing for invoices, event registration for multiple attendees, invoice generation for customers. You can generate bulk Payment Links via DOKU Dashboard by following the steps below:

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Navigate to **Accept Payments** > **Payment Link**
3. Open **Bulk Payment Link** tab
4. Click **Import XLSX**

<figure><img src="/files/Lo4Zl1TUzCNwwvKMYDJu" alt=""><figcaption></figcaption></figure>

5. After clicking import XLS button, merchant will have options on which template they want to download and use.

<figure><img src="/files/c3F9QuIHShtLk2Ehh6so" alt=""><figcaption></figcaption></figure>

* **Amount & Description only**
  * This template format is used when merchants want to create bulk payment links using only the **amount** and **description**, along with basic customer information and link settings. It is suitable for simpler payment scenarios where item details are not needed.

    with required value&#x20;

<figure><img src="/files/Kb2z4VlaMKiaNOir0FJT" alt=""><figcaption><p><strong>"Amount and Description Only"</strong> Template</p></figcaption></figure>

* **Include Product Information**
  * This template is used when merchants want to create bulk payment links that include product-level details such as item name , item price and item qty. It is suitable for payment that have items on it, it does not have to be physical items it also suitable for list of services.

    with required value

<figure><img src="/files/ltxwlS2HtPjR2gnjajuj" alt=""><figcaption><p><strong>"Amount and Description Only"</strong> Template</p></figcaption></figure>

<table><thead><tr><th width="262.56854248046875">Columns Name</th><th>Template</th><th>Description</th></tr></thead><tbody><tr><td>Amount</td><td>Amount and Description Only</td><td>Total amount to be paid</td></tr><tr><td>Description</td><td>Amount and Description Only</td><td>Description of payment purpose</td></tr><tr><td>Item Name</td><td>Include Product Information</td><td>Input the item name to be displayed in the payment link. To add multiple items, separate each item name using a semicolon ( ; )</td></tr><tr><td>Item Price</td><td>Include Product Information</td><td>Input the price of each item to be displayed in the payment link. Use a semicolon ( ; ) to separate multiple prices. The number of prices entered must match the number of item names provided in the Item Name field</td></tr><tr><td>Item Quantity</td><td>Include Product Information</td><td>Input the quantity of item, use semicolon ( ; ) to seperate multiple quantity. The numbers of quantity entered must match the number of item names provided in the Item Name field</td></tr><tr><td>Order Number</td><td>Both Templates</td><td>Set a custom invoice or reference number for each payment link</td></tr><tr><td>Customer Name</td><td>Both Templates</td><td>-</td></tr><tr><td>Customer Email</td><td>Both Templates</td><td>-</td></tr><tr><td>Customer Phone</td><td>Both Templates</td><td>-</td></tr><tr><td>Customer Address</td><td>Both Templates</td><td>-</td></tr><tr><td>Customer Address - State</td><td>Both Templates</td><td>-</td></tr><tr><td>Customer Address - City</td><td>Both Templates</td><td>-</td></tr><tr><td>Customer Address - Postal Code</td><td>Both Templates</td><td>-</td></tr><tr><td>Partial Min. Amount</td><td>Both Templates</td><td>When merchant fill this columns, Partial Payments will be enabled</td></tr><tr><td>Success Redirect URL</td><td>Both Templates</td><td>When merchants fill this columns after customer paid, it will redirect to URL set by the merchants</td></tr><tr><td>Expiry Date</td><td>Both Templates</td><td>Set the expiry date of the payment link</td></tr><tr><td>Custom URL</td><td>Both Templates</td><td>Set custom URL, where merchants can custom the suffix URL</td></tr><tr><td>Enable Pay Later</td><td>Both Templates</td><td><p>When merchants fill the column with "Yes", the system will verify whether the Phone Number, Address, State, City, and Postal Code columns have been completed.</p><p><br>If any of these columns are left blank, the customer will first be redirected to a payment page where they must complete the missing details before proceeding to the checkout page.</p></td></tr></tbody></table>

6. After filling out the template, return to the Import XLS page and upload your file. The processing time will depend on the number of rows:

* For files with under 200 rows, the upload will be processed instantly
* For files with more than 200 rows, the upload will be processed within 5 minutes
* The maximum number of rows supported per upload is 300

After uploading the file, the system will return a success or fail status. If the upload fails, merchants can view detailed error messages for each affected row, indicating what needs to be corrected before reuploading. This helps ensure accurate data submission and faster resolution of issues.

<table><thead><tr><th width="197">Error Type</th><th>Resolution</th></tr></thead><tbody><tr><td>Date Format Error</td><td>Make sure the date format is <code>DD/MM/YYYY HH:MM:SS</code><br>(e.g. <code>30/06/2023 23:59:59</code>)</td></tr><tr><td>Duplicate Custom Link</td><td>Make sure each Custom Link is unique across other Payment Links that you are creating</td></tr><tr><td>Custom Link Already Used</td><td>Choose a new Custom Link if one has already been registered</td></tr><tr><td>Partial Payments Missing Customer Info</td><td>If <code>partial_min_amount</code> column is used, <code>stomer_name</code> and <code>customer_email</code> columns become mandatory</td></tr></tbody></table>

***

## WhatsApp

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only
{% endhint %}

Create Payment Link with a WhatsApp bot powered by WhatsApp Flow. This provides a convenient, conversational interface where merchants can generate payment links directly within WhatsApp, streamlining the creation process without needing to access the dashboard. Ideal for business owner or field agent that need to create link to accept payment that does not required laptop or PC. You can generate a Payment Link via WhatsApp app by following the steps below:

**Step 1: Register WhatsApp Number**

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Navigate to **Accept Payments** > **Payment Link**
3. Access **Payment Link Settings** by clicking the gear icon (⚙️) next to **Create Payment Link** icon
4. On **Payment Link Settings** page under **Bot** tab, Click **Add Phone Number**

<figure><img src="/files/6AsBgFai0ABeIjz3eIgo" alt=""><figcaption></figcaption></figure>

5. Register your WhatsApp number
6. Chat to DOKU Bot by clicking **Use Payment Link Bot Now**

{% hint style="info" %}
If your phone number is not yet registered / linked to your account, the bot will prompt you to do so first before proceeding.
{% endhint %}

**Step 2: Chat with DOKU Bot**

On WhatsApp app, merchants can chat with the bot and complete the following actions:

{% tabs %}
{% tab title="Welcome Menu" %}

<figure><img src="/files/FywBMRWvUHBHDXepaBiH" alt="" width="188"><figcaption></figcaption></figure>

Merchants with [Multi-brand](broken://spaces/v2yktLySwfjgLEzgCPwF) activated will be prompted to select the brand they want to use before proceding. Otherwise, merchants can choose to

1. Create Payment Link
2. Check Payment Status

By selecting Create Payment Link, a form will open where the merchant can choose between creating a Single Payment Link or Multiple Payment Link. By selecting Check Payment Status, the merchant will receive data regarding the transaction status of their existing payment links, making it easy to track which payments have been completed or are still pending.
{% endtab %}

{% tab title="Create Payment Link" %}

<figure><img src="/files/XJBHPxz7PRs6ZRe0sVhg" alt=""><figcaption></figcaption></figure>

By selecting Create Payment Link, a form will open where the merchant can choose between creating a Single Payment Link or Multiple Payment Link.&#x20;

#### Single Payment Link

1. Select Single Payment link in Payment Link Type
2. Fill the Amount and short description
3. Fill expiry Date,&#x20;
4. In the Additional Details section, merchants have optional fields such as Order Number, Customer Name, and Collect Customer Information. If the Customer Name is not provided, DOKU will prompt the customer to fill it in on the payment page before continuing to checkout.\
   This behavior differs from the Collect Customer Information setting. If merchants do not enable collection for fields like Email, Phone Number, or Address, DOKU will not request this information from the customer. Merchants can choose which of these fields to collect based on their needs.
5. After completing the Payment Link form, the merchant will receive a message from the bot containing the payment link along with a summary of the payment details. This allows the merchant to easily review and share the link with customers directly from WhatsApp.

#### Multiple Payment Link

1. Select Multiple Payment Link in Payment Link Type
2. Fill the Amount and short description
3. Fill expiry date
4. Fill the limit payments
5. In the Additional Details section, merchants have optional fields such as Order Number, Customer Name, and Collect Customer Information. If the Customer Name is not provided, DOKU will prompt the customer to fill it in on the payment page before continuing to checkout.\
   This behavior differs from the Collect Customer Information setting. If merchants do not enable collection for fields like Email, Phone Number, or Address, DOKU will not request this information from the customer. Merchants can choose which of these fields to collect based on their needs.
6. After completing the Payment Link form, the merchant will receive a message from the bot containing the payment link along with a summary of the payment details. This allows the merchant to easily review and share the link with customers directly from WhatsApp.
   {% endtab %}

{% tab title="Check Payment Status" %}

<figure><img src="/files/pwOp9YgReRWPJhMAHUQ6" alt="" width="375"><figcaption></figcaption></figure>

Merchants can check the status of their payments by selecting "Check Payment Status" in the WhatsApp bot. The bot will ask whether they want to view all transactions related to a specific brand or only transactions created using their phone number. This means merchants can check transactions across different brands, as long as the transactions were created using the same phone number.
{% endtab %}
{% endtabs %}

***

## Juragan DOKU

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only
{% endhint %}

Create Payment Link with Juragan DOKU app that are available on Android and iOS. This provides flexibility and convenience, allowing business owners to generate and share payment links anytime and anywhere. The app is especially beneficial for merchants who are often on the move or working in the field, as it eliminates the need for a laptop or desktop to manage payments. You can generate a Payment Link via Juragan DOKU app by following the steps below:

1. Log in to your [Juragan DOKU](https://docs.doku.com/mobile-apps/juragan-doku#installation) app
2. Click **Buat Tagihan**
3. Merchants can input the desired amount and a short description for the purpose of the payment,these are the required fields. Additionally, merchants can set a due date and select a customer from the customer section. There are also optional fields where merchants can enter a reference order ID and a custom payment link URL.&#x20;

<figure><img src="/files/aal4TPH5J980qgkcFoXz" alt="" width="375"><figcaption></figcaption></figure>

***

## FAQ

<details>

<summary>What is the maximum transaction amount that can be accepted in one Payment Link?</summary>

The maximum transaction amount that can be accepted through a single Payment Link is **999,999,999,998** (nine hundred ninety-nine billion, nine hundred ninety-nine million, nine hundred ninety-nine thousand, nine hundred ninety-eight) IDR. Please note that this limit may also be subject to additional restrictions imposed by your acquiring bank or payment service provider.

</details>

<details>

<summary>What is the limit of my Custom Link?</summary>

Merchants are allowed to have a limit of 10 Custom Links per month.

</details>

<details>

<summary>How to check the Custom Fields that are filled by my customer?</summary>

Customer inputs from Custom Fields are automatically recorded and can be viewed in the **Transaction Report** on your DOKU Dashboard. To view them, navigate to **Reports > Transactions**. The details submitted by customers will be displayed alongside each corresponding transaction.

</details>

<details>

<summary>Can I erase my custom field?</summary>

No. Once a custom field has been created, it cannot be deleted.

This restriction helps preserve the integrity of the data collected through the custom field. If you no longer need a custom field, you can leave it unused in future Payment Links.

</details>

<details>

<summary>Can custom field be edited?</summary>

Yes, with some limitations. You can update the custom field's name and description, but its type cannot be changed after creation.

</details>

<details>

<summary>How many custom fields can I add to one Payment Link?</summary>

You can add up to **2 custom fields** to a Payment Link. If you require additional custom fields, please contact your Account Manager for assistance.

</details>


# Manage Payment Link

Edit, deactivate, export, and manage notifications or invoices for your payment links

## View Status

{% tabs %}
{% tab title="Single Payment Link" %}

<table><thead><tr><th width="150">Status</th><th>Definition</th></tr></thead><tbody><tr><td>Unpaid</td><td>Payment Link is pending and awaiting for payment</td></tr><tr><td>Paid</td><td>Payment Link has been paid in full amount</td></tr><tr><td>Partially Paid</td><td>Payment Link is allowed for partial payments, has been paid, but not in full amount</td></tr><tr><td>Expired</td><td>Payment Link has reached the expiration time that was set</td></tr><tr><td>Cancelled</td><td>Payment Link has been voided or refunded by the merchant</td></tr><tr><td>Deactivated</td><td>Payment Link has been deactivated and cannot be accessed</td></tr></tbody></table>
{% endtab %}

{% tab title="Multiple Payment Link" %}

<table><thead><tr><th width="154">Status</th><th>Definition</th></tr></thead><tbody><tr><td>Active</td><td>Payment Link is accessible and can accept payments</td></tr><tr><td>Deactivated</td><td>Payment Link has been deactivated and cannot be accessed</td></tr><tr><td>Expired</td><td>Payment Link has reached the expiration time that was set</td></tr></tbody></table>
{% endtab %}

{% tab title="Bulk Payment Link" %}

<table><thead><tr><th width="200">Status</th><th>Definition</th></tr></thead><tbody><tr><td>Processing</td><td>Payment Links are in the process of being created</td></tr><tr><td>Success</td><td>Payment Links have been created</td></tr><tr><td>Failed</td><td>Payment Links are failed to be created due to input errors</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

***

## Edit Link

You can edit a **Multiple Payment Link** to update details such as the expiry date, description, or item information. This helps ensure accuracy if your product or payment terms change. You can edit a Multiple Payment Link by following the steps below:

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Navigate to **Accept Payments** > **Payment Link**
3. Open the **Multiple Payment Link** tab
4. Find the payment link you would like to edit, then click the ellipsis **( ⋮ )** icon on the far right and select **Edit**
5. **Edit Payment Link** page will appear, where you can modify the following fields:
   * Expiry Date
   * Payment Description
   * Item Name
   * Item Quantity
6. Click **Save Payment Link** to apply the changes.

{% hint style="info" %}
Only Multiple Payment Links can be edited. Single Payment Link are not editable. If your Single Payment Link contains incorrect details and you need to make changes, deactivate it and create a new link instead.
{% endhint %}

***

## Deactivate Link

You can deactivate a **Single Payment Link** or a **Multiple Payment Link** if it is no longer needed or was created with incorrect details. Once deactivated, the link will no longer be accessible to customers and cannot be used to make payments. You can deactivate your Payment Link by following the steps below:

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Navigate to **Accept Payments** > **Payment Link**
3. On the **Single Payment Link** tab or **Multiple Payment Link** tab, find the payment link you would like to deactivate, then click the ellipsis **( ⋮ )** icon on the far right and select **Deactivate**
4. Your Payment Link status will change to **Deactivated**, and it will no longer accept payments.

***

## Manage Email Notification

With our Payment Link, you can control how email notifications are sent to you and your customers. You can configure recipients, choose which events trigger emails, customize the email design, and resend messages when needed.

### Configure Recipients and Events

You can specify who receives payment-related notifications and define which events trigger those notifications by following the steps below:

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Go to **Accept Payments** > **Payment Link**
3. Access **Payment Link Settings** by clicking the gear icon (⚙️) next to **Create Payment Link** icon
4. On the **Payment Link Settings** page, open the **Notification** tab
5. Under **Notification For**, select **Payment Link** or **Payment Link Bot** (for links created via WhatsApp)
6. Select the customer notification events you want to enable:
   * Payment Link created
   * Payment Link about to expire
   * Payment Link expired
   * Payment successful or completed
7. (Optional) Enable **Send notification to me** to receive notifications as a merchant
   * Enter the recipient’s email address and click **Add Email**
   * You can add multiple recipients as needed
8. Click **Save** to apply the changes.

The updated settings will automatically apply to all new payment links.

### Customize Email Design

You can personalize your notification emails to align with your brand identity by following the steps below:

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Navigate to **Accept Payments** > **Payment Link**
3. Go to **Payment Link Settings** by clicking the gear icon (⚙️) next to **Create Payment Link** icon
4. On **Payment Link Settings** page, select the **Email Design** tab.
5. Configure your notification preferences — such as enabling or disabling email alerts for payment events — based on your business needs.

### Resend Email

You can resend a payment email to your customer if they missed or deleted the original message by following the steps below:

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Navigate to **Accept Payments** > **Payment Link**
3. On the **Single Payment Link** tab, find the payment link you would like to resend email for, then click the ellipsis **( ⋮ )** icon on the far right and select **Send Email Notification.**

If the **Send Email Notification** option is not available, it means the customer’s email address was not provided during payment link creation or has not been collected yet.

***

## Export List

You can export a list of your Payment Links to review or share transaction data offline. The exported file helps you keep track of payment statuses and link performance. You can export the list of your Payment Link by following the steps below:

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Navigate to **Accept Payments** > **Payment Link**
3. Apply filters as needed to refine the list&#x20;
4. Click the download (⬇️) icon&#x20;
5. Review the filter settings, then click **Export** to download the file.

***

## Generate Invoice

All **Single Payment Links** can be generated into downloadable invoices in PDF format. This feature allows you to easily provide customers with official payment documentation for completed or pending transactions. You can generate an invoice for your payment link by following the steps below:

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Navigate to **Accept Payments** > **Payment Link**
3. On the **Single Payment Link** tab, find the payment link you would like to generate an invoice for, then click the ellipsis **( ⋮ )** icon on the far right and select **Export to PDF**
4. Wait a few seconds until a pop-up appears to download the invoice.

***

## FAQ

<details>

<summary>Can Payment Link notifications be sent via WhatsApp or SMS?</summary>

No, at the moment, Payment Link notifications can only be sent via email. Notifications through SMS, WhatsApp, or other messaging platforms are not yet supported.

</details>

<details>

<summary>What types of events can I receive notifications for?</summary>

You can receive email notifications for key events such as:

* Payment Link created
* Payment Link is about to expire
* Payment Link is expired
* Payment is successful or has been completed

</details>

<details>

<summary>Can I send notifications to multiple email addresses?</summary>

Yes, you can send Payment Link notifications to up to five (5) email recipients. You can add these email addresses in the Notification tab within the Payment Link Settings. Make sure each address is entered correctly to ensure successful delivery.

</details>

<details>

<summary>Can Single Payment Link be edited?</summary>

No, Single Payment Links cannot be edited. If you entered incorrect details in a Single Payment Link, you can deactivate the link and create a new one instead.

</details>


# Customize Checkout Page

Customize the interface of your DOKU Checkout page

## Sort Payment Method

You can sort as well as show/hide payment methods that you have activated for your Business Account. You may do so by following these simple steps:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Accept Payments** section, select **Checkout Appearance**
4. **Checkout Page Configuration** page will appear, then click **Payment Method Settings** tab where you can sort the payment methods by dragging the payment method to the desired order, and show/hide the payment methods by ticking or unticking the payment method
5. Click **Save** button to save your configuration

***

## Customize Interface

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Accept Payments** section, select **Checkout Appearance**
4. **Checkout Page Configuration** page will appear, then click **Interface Settings** tab where you will find several options for customizing the look and feel of your checkout page, including the ability to add your logo and change the background color that fits your brand
5. Click **Save** button to save your configuration

***

## FAQ

<details>

<summary>Why is my payment method missing on the checkout page?</summary>

A payment method may not appear on the checkout page if:

* It has not been activated for your account, or
* Its status is still inactive.

Please refer to the activation guide on [Manage Payment Methods](/get-started/manage-business/manage-payment-methods) to check and confirm whether your payment method is active.

</details>


# Digital Catalog

Showcase your products with an online catalog

<figure><img src="/files/uXb9Px0Iqm5WKLorxgA4" alt=""><figcaption></figcaption></figure>

## Overview

**Digital Catalog** enables merchants to create a digital storefront without requiring integration, technical development, or the need to maintain separate website infrastructure. With Digital Catalog, merchants can easily showcase their products, manage inventory, and accept payments through DOKU’s secure payment gateway.&#x20;

It is an ideal solution for entrepreneurs and small businesses seeking to quickly establish a professional online presence and start selling.

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Manage Catalog</strong><br><br></td><td><a href="/pages/9QoWMubKZL20ChSfIfjj">/pages/9QoWMubKZL20ChSfIfjj</a></td></tr><tr><td><strong>Manage Items</strong><br><br></td><td><a href="/pages/Fh7j10ZgXsdeFmo992XH">/pages/Fh7j10ZgXsdeFmo992XH</a></td></tr><tr><td><strong>Place an Order</strong><br><br></td><td><a href="/pages/6Db3TM5zrwmbauO8ywOZ">/pages/6Db3TM5zrwmbauO8ywOZ</a></td></tr><tr><td><strong>Manage Orders</strong><br><br></td><td><a href="/pages/7KIxwRsAjEMZLLoVc7yg">/pages/7KIxwRsAjEMZLLoVc7yg</a></td></tr></tbody></table>

***

## Key Features

<table><thead><tr><th></th><th width="375.5999755859375"></th></tr></thead><tbody><tr><td><strong>Feature</strong></td><td><strong>Description</strong></td></tr><tr><td>Showcase</td><td>Organize items into curated collections for events, themes, or categories.</td></tr><tr><td>Featured Items</td><td>Pin up to 5 priority items to the top of your catalog regardless of sorting.</td></tr><tr><td>Multi-Variant Support</td><td>Allows up to 2 item variants (e.g., color, size) per product.</td></tr><tr><td>Scheduled Publication</td><td>Choose to publish items immediately, at a later time, or within a custom date range.</td></tr><tr><td>QR Code</td><td>Generate QR codes or share catalog/items via WhatsApp, Facebook, Telegram, X, and links.</td></tr><tr><td>Shipment</td><td>Partnered with 3PL logistics. DOKU handles delivery requests automatically—no need for manual coordination. 3PL include JNE, J&#x26;T, SiCepat, Go-Send, Grab Express, Indah Cargo, dan Deliveree.</td></tr><tr><td>Order Tracking and Notification</td><td>Customers can easily track the status of their orders in real-time, and will receive email notifications for every update, including order processing, shipment, and delivery.</td></tr><tr><td>Custom Order Type<br><br><span data-gb-custom-inline data-tag="emoji" data-code="2139">ℹ️</span><sub>Only available for Malaysian Business Accounts</sub></td><td>Allow customers to choose their preferred fulfillment method during checkout, either <strong>Delivery Address</strong> or <strong>Self Pickup</strong>.</td></tr><tr><td>Custom Delivery Fee<br><br><span data-gb-custom-inline data-tag="emoji" data-code="2139">ℹ️</span><sub>Only available for Malaysian Business Accounts</sub></td><td>Allow Configure Delivery fee based on order quantity and delivery destination</td></tr><tr><td>Custom Product Additional Fields<br><br><span data-gb-custom-inline data-tag="emoji" data-code="2139">ℹ️</span><sub>Only available for Malaysian Business Accounts</sub></td><td>Collect additional product-specific information from customers by adding customizable input fields to individual products.</td></tr><tr><td>SST<br><br><span data-gb-custom-inline data-tag="emoji" data-code="2139">ℹ️</span><sub>Only available for Malaysia Business Accounts</sub></td><td>Manage Sales and Service Tax (SST) for orders in compliance with Malaysian tax requirements.</td></tr></tbody></table>

***

## Use Cases

{% tabs %}
{% tab title="Catalog" %}
**🍛 Food & Beverages**

* Digital menu that displays all food and beverages.
* Use variants for portion sizes, spice levels, or topping options.

**🏨 Travel & Hospitality**

* Use as a room service menu or upsell page.
* Showcase services like spa bookings, tours, or in-room items with schedule-based availability.
  {% endtab %}

{% tab title="Store" %}
**🛍️ Retail**

* List physical goods with images and variants.
* Great for clothing, accessories, or gadgets.

**📚 Education**

* Sell books, uniforms, or digital learning materials.
* Create showcases by class, grade, or semester.

**🎮 Digital & Gaming**

* Distribute digital products like game codes, event tickets, or downloads.
* Use custom links for digital delivery, and variants for different editions or regions.
  {% endtab %}

{% tab title="Event Bookings" %}
**🎫 Event Bookings**

* Distribute digital products like game codes, event tickets, or downloads.
* Use custom links for digital delivery, and variants for different editions or regions.
  {% endtab %}

{% tab title="Freelancers" %}
**🧑‍💻 Freelancers**

* Use Digital Catalog as a service menu.
* List pricing packages (e.g., logo design, consultation) with variant support for revisions or delivery time.
  {% endtab %}
  {% endtabs %}

***

## FAQ

<details>

<summary>Can I sell services instead of products on Digital Catalog?</summary>

Yes. Use item descriptions and optional fields creatively. Great for freelancers or professional services.

</details>

<details>

<summary>Is there a way to schedule flash sales or time-limited products on Digital Catalog?</summary>

Yes. Use the Custom Publication Period to publish items for specific dates only.

</details>

<details>

<summary>Can I use Digital Catalog for digital downloads?</summary>

Yes. Upload a digital item link per variant. Ideal for game keys, event tickets, etc.

</details>

<details>

<summary>Can I integrate Digital Catalog with my existing website?</summary>

Not directly, but you can share catalog links or embed QR codes anywhere on your site.

</details>


# Manage Catalog

## Set Up Catalog **Settings**

**Catalog Settings** page allows merchants to configure the key details of their Digital Catalog. These settings determine how the catalog is displayed to customers and how customers can contact your business.

<figure><img src="/files/8HBWBBsJAaf9M3P250Qp" alt=""><figcaption></figcaption></figure>

Your can configure the settings by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs) and navigate to **Accept Payments > Digital Catalog**
2. Click the ellipsis **( ⋮ )** icon in the top-right corner, then select **Settings**

The Settings page contains the following tabs:

1. **Catalog Information** - customize your catalog's appearance and customer experience
2. **Contact Details** - contains the information used for order fulfillment and customer communication
3. **Delivery Rules** - allows you to configure delivery fees based on customer location and order quantity

{% tabs %}
{% tab title="Catalog Information" %}

<figure><img src="/files/iXV0tTI8c0KHg2NEQZTL" alt="" width="563"><figcaption></figcaption></figure>

The following are the available settings in **Catalog Information** tab:

1. **Logo**\
   Upload your business logo. The logo is displayed in the catalog header and other customer-facing pages. To update your logo, click **Change Logo**. You will be redirected to the **Brand Information** page.
2. **Catalog Name**\
   Set or edit the name displayed on your Digital Catalog. The catalog name is based on your brand name. To update it, click **Change Brand Name**, which will redirect you to the **Brand Information** page.
3. **Digital Catalog Link**\
   Customize your catalog URL. The URL can contain up to 48 characters.
4. **Show Sold Items**\
   Enable or disable the display of the number of items sold.
5. **Item Sorting**\
   Choose the default item sorting method:
   * Best Seller
   * Recent Upload
6. **Language Preference**\
   Select the default language displayed to customers:
   * Indonesian
   * English
7. **Success URL**\
   Specify the URL where customers will be redirected after a successful checkout, such as a thank-you page or order confirmation page.
   {% endtab %}

{% tab title="Contact Details" %}

<figure><img src="/files/U7ts5t5zpz05HOkxB59A" alt="" width="563"><figcaption></figcaption></figure>

The following are the available settings in **Contact Details** tab:

1. **Phone Number**
2. **Email Address**
3. **Postal Code**
4. **Business Address**

These details may be displayed to customers on your Digital Catalog and are used for shipping and delivery purposes.

> **Important:** Postal Code and Address fields must be completed before you can use the Digital Catalog.

{% hint style="info" %}
Address hint feature is only available for Malaysian Business Account
{% endhint %}
{% endtab %}

{% tab title="Delivery Rules " %}
{% hint style="info" %}
Only available for Malaysian Business Account
{% endhint %}

<figure><img src="/files/ctWfFg4TlPopQeaZsNtx" alt=""><figcaption></figcaption></figure>

**Delivery Rules** tab allows you to configure delivery fees based on customer location and order quantity.

Delivery Pricing Rules enable you to:

* Set different delivery fees for different delivery regions.
* Create quantity-based delivery fee tiers.
* Define shipping costs based on the total quantity of items in the customer's cart.

When multiple rules apply, the system automatically uses the rule with the highest matching minimum quantity.

Delivery fees are calculated and displayed during checkout. If SST is enabled for the order, the applicable SST amount will also be applied to the delivery fee.
{% endtab %}
{% endtabs %}

***

## View and Share Catalog

You can easily view and share your Digital Catalog with customers.

### Access Your Catalog

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs) and navigate to **Accept Payments > Digital Catalog**
2. Click **View My Catalog**

Customers who receive your catalog link can browse products and place orders directly from your catalog.

### Sharing Options

You can share your catalog through:

* QR Code (downloadable and printable)
* Direct Link
* Social Media

{% tabs %}
{% tab title="QR Code" %}

<figure><img src="/files/Lycg8ZyBqmbGOiiGF71c" alt=""><figcaption></figcaption></figure>

Customers who scan the QR code will be redirected directly to your catalog, where they can browse products and place orders.
{% endtab %}

{% tab title="Links and Social Media" %}

<figure><img src="/files/bP4uZrWIZfkCoLBpwco0" alt="" width="375"><figcaption></figcaption></figure>

**1. Direct Link**

Copy and share the direct URL to your Digital Catalog. Customers who open the link will be taken directly to your catalog page.

**2. Social Media**

You can share your catalog through supported social media channels:

* WhatsApp
* Facebook
* X
* Telegram
  {% endtab %}
  {% endtabs %}

***

## FAQ

<details>

<summary>Can I have multiple catalogs in a single account?</summary>

You can only have one catalog per brand. To manage multiple catalogs, you must activate the Multi-Brand feature, which allows you to create and manage separate catalogs under different brands within the same Business Account. Tip: Visit [Manage Multiple Brands](/get-started/manage-business/manage-multiple-brands) page to learn how to activate the Multi-Brand feature.

</details>

<details>

<summary>Why is my item missing from my catalog?</summary>

If your item is not appearing in your catalog, it is likely because it has not been set to **"Published"** status. Only items with *Published* status are visible in the catalog. Below are possible reasons your item may not be published:

1. **Waiting for Verification**\
   The item is currently under review. It must pass the verification process before it can be published. Once approved, the status will automatically change to *Published*.
2. **Unpublished**\
   The item was manually unpublished by you or another user. To make it visible again, go to the **Items** page and change the status back to *Published*.
3. **Scheduled**\
   The item is set to be published at a future date/time, based on the schedule defined when the item was created. It will become visible in the catalog automatically once the scheduled time is reached.
4. **Draft**\
   The item is incomplete. Some required fields have not been filled in. Complete all necessary information and save the item as *Published* to make it appear in the catalog.

</details>

<details>

<summary>Can I hide my phone number, email, or address on my Digital Catalog store?</summary>

At the moment, it is not possible to hide this information on your Digital Catalog store.

</details>


# Manage Items

## Add Items

You can add new items to your Digital Catalog by following the steps below:

Navigate to Add Items

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs).
2. Navigate to **Items** or **Accept Payments > Digital Catalog**
3. Click **Add Item**&#x20;
4. Complete the required item information of each following section:

{% tabs %}
{% tab title="Item Information" %}

<figure><img src="/files/vdvDOADUNcwfaNxNb9WU" alt=""><figcaption></figcaption></figure>

1. **Title**
   * Provide the item name (up to 150 characters)
2. **Category**
   * Select the item category (physical or digital item)
   * Services are considered digital items
3. **Showcase**
   * Group items by your own custom themes or sections
4. **Item Images**
   * Upload up to 3 images
   * Minimum resolution: 300x300 pixels
   * Maximum file size: 15 MB
5. **Description**
   * Write a description with rich text messages
   * Maximum length: 3000 characters
6. **Featured Item**
   * Up to 5 items can be featured at a time
   * Featured Items always appear at the top of your catalog, regardless of the selected sorting method
7. **Shipping Information**
   * Enable shipment for your item
   * Only applies to physical items
   * Only available for Indonesian Business Accounts
     {% endtab %}

{% tab title="Variant & Stock" %}

<figure><img src="/files/C9fG6Q4wiaCrCXPn3xKk" alt=""><figcaption></figcaption></figure>

1. **Variants**
   * Variants allow customers to select different options for the same product
   * You can create up to two variant types for each item
2. **Price**
   * Set the price and available inventory for each variant combination
3. **Stock**
   * The quantity of an item currently available for purchase
   * Stock is automatically reduced when customers place successful orders
4. **SST**
   * Enable SST for individual products and configure the applicable tax percentage
   * SST is automatically included during checkout and payment
   * The default SST rate is 6% when enabled
   * Only available for Malaysian Business Accounts
     {% endtab %}

{% tab title="Custom Fields" %}

<figure><img src="/files/3U9EXgpoVVwuMCrudzpA" alt=""><figcaption></figcaption></figure>

Custom fields allow you to collect additional information from customers during checkout.

* Up to 3 custom fields per product
* Supported field types:
  * Text Input
  * Dropdown Select (up to 6 selectable options)
* Fields can be marked as Required
* Examples of custom fields include:
  * Custom engraving text
  * Preferred delivery instructions
  * Product preferences or selections
    {% endtab %}

{% tab title="Optional Details" %}

<figure><img src="/files/b8MALwTErsA77PQ4uXHu" alt=""><figcaption></figcaption></figure>

1. **Condition**
   * Label a product as **New** or **Used** to help customers easily identify the item's condition before purchasing.

2. **SKU**
   * Unique identifier to track and manage individual items in your inventory

3. **Minimum & Maximum Purchase Quantity**
   * Set purchase quantity limits for each order

4. **Publication Period**
   * Control when the item is visible in your catalog
     1. Publish immediately
     2. Schedule publication for a future date and time
     3. Set a custom active period with start and end dates
        {% endtab %}
        {% endtabs %}

5. You can either **Save as Draft** or **Publish**
   * Draft saves the item in your inventory without displaying it in your Digital Catalog.

     Use this option when the item is incomplete or not yet ready for publication
   * Publishes the item immediately and makes it visible in your Digital Catalog, subject to verification requirements

***

## Edit Items

You can edit your existing items by following the steps below:

1. View All Items
   * On **Items** page, find the Item that you wish to edit
2. Edit Item Details
   * On **Items** page, click the ellipsis icon **( ⋮ )** and select **Edit**
3. Save Changes
   * After making edits, save the changes. The item will be **verified** before being republished.

{% hint style="info" %}
Any edits (except stock) require re-verification before republishing.
{% endhint %}

***

## FAQ

<details>

<summary>Can I hide out-of-stock items?</summary>

You can hide them by unpublishing the item on **Items** page.

</details>

<details>

<summary>Can I edit an item after it has been published?</summary>

Yes, but changes (except stock updates) will trigger re-verification before republishing.

</details>

<details>

<summary>Is there a way to schedule flash sales or time-limited products?</summary>

Orders are only listed after successful payment. Unpaid sessions will not appear in your dashboard.

</details>

<details>

<summary>Why is the status of my item showing as 'Draft'?</summary>

The item is marked as **‘Draft’** because it was saved without being published. To make the item available for customers, simply follow the steps below:

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs).
2. Navigate to **Items**
3. Click **Edit Item**
4. Click **Save Changes** (do not select *Save as Draft*).

Once saved, the item will be live and visible to your customers after a successful verification.

</details>

<details>

<summary>Why is the status of my item showing as 'Waiting for Verification'?</summary>

The item is marked **'Waiting for Verification'** because it is currently under review and pending verification by our team. The verification process typically takes between 15 minutes to 48 hours. If the status remains unchanged beyond this period, you are recommended to [submit a support ticket](https://help.doku.com/en/support/tickets/new) or send an email to <care@doku.com> to escalate the issue.

</details>


# Place an Order

Guide to place an order on Digital Catalog as a customer

Customers can browse products, add items to their cart, and complete purchases directly through the Digital Catalog.

## 1. Browse the Catalog

<figure><img src="/files/DDpNspgs0Q2ZpDJndcp7" alt="" width="563"><figcaption></figcaption></figure>

To browse a merchant's Digital Catalog:

1. Open the merchant's catalog link.
2. Browse available products, including:
   * Featured Items
   * Showcases that group related products
3. Use the search bar to find specific products.
4. Apply available filters and sorting options, such as category or price, to narrow your search.

***

## 2. View Item Details

<figure><img src="/files/gDLOeAjFzZR1kyHclydz" alt="" width="563"><figcaption></figcaption></figure>

To view more information about a product:

1. Click on the item you want to purchase.
2. Review the product details, including:
   * Item name
   * Description
   * Price
   * Available variants (if applicable)
3. Select the desired variant, such as size or color. Related product images will be displayed based on your selection.
4. Choose the quantity you wish to purchase.
5. Click **Add to Cart**.

***

## 3. Check Out

<figure><img src="/files/9Rjm96hV91ipYoCSI414" alt=""><figcaption></figcaption></figure>

When you are ready to place your order:

1. Open your shopping cart to review all selected items.
2. Adjust item quantities if necessary.
3. Click **Buy Now** to proceed to checkout.
4. Fill in the required customer information:
   * Recipient Name
   * Email
   * Phone Number
   * Postal Code
   * Order Type (if available)
   * Address (only for items that requirement shipment)
   * Shipping Method (only for items that requirement shipment)

***

## 4. Payment

Next, complete your payment by following the steps below:

1. Review your order details.
2. Select your preferred payment method.
3. Complete the payment through DOKU's secure payment system.

Once payment is successfully completed, your order will be created and processed by the merchant.

***

## 5. Track Your Order

After placing an order, you will receive an email containing your order details and tracking information (if applicable).

You can monitor your order status through the following stages:

1. **Payment Confirmed** – Payment has been successfully received.
2. **Order Processed** – The merchant has started preparing your order.
3. **Order Sent** – The order has been shipped or dispatched.
4. **Order Delivered** – The order has been delivered to the recipient.
5. **Order Completed** – The order has been successfully fulfilled and completed.


# Manage Orders

Guide to manage Digital Catalog orders as merchants

## View Orders

The **Order Summary** section provides a quick overview of merchant order activity. It allows you to monitor the status of customer orders at a glance.&#x20;

Orders are automatically grouped by status:

<table data-header-hidden><thead><tr><th width="175.5999755859375">Status</th><th>Description</th></tr></thead><tbody><tr><td><strong>Status</strong></td><td><strong>Description</strong></td></tr><tr><td><strong>New Order</strong></td><td>The customer has completed the payment, and the order is awaiting processing by the merchant.</td></tr><tr><td><strong>Processing</strong></td><td>The merchant has acknowledged the order and is preparing it for shipment or pickup.</td></tr><tr><td><strong>Out for Delivery</strong></td><td>The merchant has handed over the order to the courier for delivery to the customer.</td></tr><tr><td><strong>Delivered</strong></td><td>The order has reached the customer’s address, and the status is automatically updated by the shipment.</td></tr><tr><td><strong>Completed</strong></td><td>The order is successfully closed. This status can be updated by the customer or will be automatically marked as completed if there is no confirmation from the customer within a set period.</td></tr></tbody></table>

1. **View Orders**
   * Go to the **Orders** section in the Digital Catalog dashboard. Here you can view all orders placed by customers.
2. **Order Status**
   * Orders are tracked through various stages:
     * **New Order:** The customer has completed the payment, and order needs to be processed by the merchant.
     * **Processing:** Merchant has acknowledged the new order and is processing the order.
     * **Out for Delivery:** Merchant has requested for item to be picked up by the courier.
     * **Delivered:** The order has arrived at the customer’s location.
     * **Completed:** The order is successfully completed.
3. **Filter Orders**
   * Use filters to search by **item name**, **date**, or **order status**.
4. **View Order Details**
   * Click on any order to view its detailed information, including payment, item details, and tracking info.

***

## FAQ

<details>

<summary>What happens if an order isn’t completed?</summary>

All paid orders will be completed in 2x24 hours if the order has been processed and delivered.

</details>


# Customer Static VA

Create and manage reusable virtual accounts for your customers

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only
{% endhint %}

## Overview

A **Customer** **Static VA (CSVA)** is a reusable virtual account number assigned to a customer that can be used for multiple payments. Unlike per-transaction VAs, a static VA does not change for the same customer and can be used repeatedly, which is useful for subscription-like flows, or recurring collections without API integration.

***

## Create CSVA

### Requirements

* VA payment method(s) enabled for your account
* Customers added to your customers database (refer to [Manage Customers](/get-started/manage-business/manage-customers))
* Billing type configured for the bank(s) you will be using
  * FIX BILL is for closed amount VA
  * NO BILL is for open amount VA
* Suffix features must be activated for the bank(s) and billing type(s) you will be using
  * DOKU Generated Payment Code (DGPC) for auto-generated suffix
  * Merchant Generated Payment Code (MGPC) for phone number and reference ID suffix

<figure><img src="/files/8jPfUbwMGAdfCODuVURx" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Billing type and suffix features can be found on **Settings > Payment Virtual Account** page
{% endhint %}

### Single-Customer SVA

You can create a static VA for a single customer by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Customers** from the menu
3. On the **Customers** page, find the customer you want to create a VA for
4. Click the ellipsis **( ⋮ )** icon on the far right of that customer row, then select **Create Virtual Account**<br>

   <figure><img src="/files/rGeLY4gHkQuTLIl7oKX1" alt=""><figcaption></figcaption></figure>
5. Select Amount Type:
   1. **Closed Amount**: Amount is decided by the merchant, and is set when creating SVA Payment Link (refer to [#create-sva-payment-link](#create-sva-payment-link "mention"))
   2. **Open Amount**: Amount is decided by the customers at payment time
6. After choosing amount type, **select the bank** for the VA (available banks are listed based on your account’s VA settings)
7. Select VA Suffix Customization:
   1. **Auto-generated**: DOKU generates a random suffix
   2. **Reference ID**: Suffix is generated from the customer’s Reference ID
   3. **Phone Number**: Suffix is generated from the customer’s phone number

{% hint style="info" %}
If a suffix option is unavailable, it means that option is not supported for the selected bank/billing type. DGPC will activate auto-generated, while MGPC will activate reference ID and phone number.
{% endhint %}

8. Check the preview to confirm the selected **bank**, **virtual account number**, and **suffix**<br>

   <figure><img src="/files/Juo2eL5Ta94e2OFhuUHJ" alt=""><figcaption></figcaption></figure>
9. &#x20;Click **Create Virtual Account**.

On success, a confirmation pop-up appears. Open the customer details to confirm the SVA is created and visible on their profile.

### Bulk-Customer SVA

You can create a static VA for multiple customers by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Customers** from the menu
3. On the **Customers** page, select the checkboxes for the customers you want to create SVAs for<br>

   <figure><img src="/files/oLK86xXInqPnsiotEDHH" alt=""><figcaption></figcaption></figure>
4. Click **Action**, then select **Create Virtual Account**
5. Select Amount Type:
   1. **Closed Amount**: Amount is decided by the merchant, and is set when creating SVA Payment Link (refer to [#create-sva-payment-link](#create-sva-payment-link "mention"))
   2. **Open Amount**: Amount is decided by the customers at payment time
6. After choosing amount type, **select the bank** for the VA (available banks are listed based on your account’s VA settings)
7. Select VA Suffix Customization:

   1. **Auto-generated**: DOKU generates a random suffix
   2. **Reference ID**: Suffix is generated from the customer’s Reference ID
   3. **Phone Number**: Suffix is generated from the customer’s phone number

   <figure><img src="/files/TlT485BL7vDKgqB4NaA5" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
If a suffix option is unavailable, it means that option is not supported for the selected bank/billing type. DGPC will activate auto-generated, while MGPC will activate reference ID and phone number.
{% endhint %}

8. Review the **list of selected customers** shown in the dialog
   * If you selected **Reference ID** or **Phone Number**, ensure every customer in this list has the required value. If a customer is missing the value, remove them from the list before proceeding

<figure><img src="/files/zJUzzpjqOA99y6jrwcaK" alt=""><figcaption></figcaption></figure>

9. Confirm the preview of chosen bank, VA format, and suffix customization

<figure><img src="/files/fzRtyTrcTatk7CJuiHrP" alt=""><figcaption></figcaption></figure>

10. Click **Create Virtual Account**.

On success, a confirmation pop-up appears. Open the details of each customer to confirm the SVA is created and visible on their profile if needed.

***

## Create SVA Payment Link

SVA payment links are **used for closed amount SVAs** (where the merchant defines the amount). There are two flows: **Single Link** (1 customer) and **Bulk Links** (multiple customers).

### Single Link

You can generate an SVA Payment Link via DOKU Dashboard by following the steps below:

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Navigate to **Accept Payments** > **Payment Link**
3. Click **Create Payment Link**
4. On **Create Payment Link** page, select the **Payment with Static Virtual Account** shortcut. If the shortcut isn't visible, do this manually:

   * Under **Customer Details**, toggle **Select Customer** on and choose a customer
   * Under **Payment Details**, tick **Use Customer Virtual Account** and select the bank associated with the customer’s static VA

   <figure><img src="/files/Rlr0YDUT1iQRs8PZBi4A" alt=""><figcaption></figcaption></figure>
5. Fill in **Order Details**:

   * For "Payment Description", fill in total payment and description
   * For "Add Item", fill in item name, quantity, and price

   <figure><img src="/files/iUM3jfmcSzTQD1EZTH6P" alt=""><figcaption></figcaption></figure>
6. Click **Create Payment Link**.

You can share the generated link with the customer. If email notifications are enabled, the customer will receive an email with their static VA number and the payable amount.

### Bulk Links

You can generate bulk SVA Payment Links via DOKU Dashboard by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Customers** from the menu
3. On **Customers** page, select the checkboxes for the customers you want to create bulk SVA payment links for&#x20;
4. Click **Action**, then **Download Bulk Payment Link Template**

   <figure><img src="/files/oLK86xXInqPnsiotEDHH" alt=""><figcaption></figcaption></figure>
5. Choose a template:

   1. **Amount & Description Only**: only total payment and description are required
   2. **Include Product Information**: item name, quantity, and price are required

   <figure><img src="/files/lgfU8dJ1WwYQVfuqXVWT" alt=""><figcaption></figcaption></figure>
6. Click **Download** and complete the template with the required information for each customer<br>

   <figure><img src="/files/Xw2nAL57aKh54DblrGtZ" alt=""><figcaption></figcaption></figure>
7. After completing the file, upload it back to the dashboard:
   * If the upload window is still open, click **Upload** to proceed
   * If you exited the page, go to **Accept Payments > Payment Link > Bulk Payment Link** tab, then click **Import XLSX** and upload the completed file
8. Click **Import** to generate bulk SVA payment links.<br>

   <figure><img src="/files/V0foUkuSW6CoMs2Fn7ks" alt=""><figcaption></figcaption></figure>

Once the import is complete, you can share the generated links with customers. If email notifications are enabled, customers will automatically receive an email containing their Static VA number and the payment amount.

***

## FAQ

<details>

<summary>What’s the difference between Static and Dynamic Virtual Accounts?</summary>

* **Static VA:** Reusable for the same customer; persistent and fixed.
* **Dynamic VA:** Unique per transaction; typically expires after payment or a set timeframe.

</details>

<details>

<summary>How many static virtual accounts can I create for one customer?</summary>

Each customer can have **one VA per bank per amount type**. For example, a customer can have a **BCA VA** with one *Closed Amount* and one *Open Amount*, and a separate **BRI VA** with the same setup.

</details>

<details>

<summary>Is there a limit to how many Static Virtual Accounts I can create?</summary>

There’s **no overall limit** to the number of Static VAs you can create. However, each customer is limited to **one VA per bank per amount type**.

</details>

<details>

<summary>Can I set an expiry date for my SVA Payment Link?</summary>

Yes. You can define an **expiry date and time** when creating the SVA Payment Link. Once expired, the link becomes inactive and cannot be used for payment.

</details>

<details>

<summary>Can I edit or deactivate an SVA Payment Link?</summary>

No. **SVA Payment Links cannot be edited or deactivated** after creation. If you need different link data, create a new payment link instead.

</details>

<details>

<summary>Can I edit a Static Virtual Account after it’s created?</summary>

No. Once a Static VA is created, **it cannot be modified**. To change bank or suffix, create a new SVA for the customer.

</details>

<details>

<summary>Can I deactivate a Static Virtual Account?</summary>

Yes. Merchants can **deactivate a Static VA** from the customer’s detail page if the VA is no longer needed.

</details>

<details>

<summary>Can Static Virtual Accounts be used for recurring payments?</summary>

Yes. Static VAs are **reusable**, allowing customers to make multiple payments using the same VA, suitable for recurring or installment-based collections.

</details>

<details>

<summary>Can I track which customer made the payment through a Static VA?</summary>

Yes. Each Static VA is **linked to a specific customer**. Payments made to that VA are visible in **Reports > Transactions** on the DOKU Dashboard.

</details>


# QRIS

Set up QRIS for multi-channel QR payments

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only
{% endhint %}

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Dynamic QRIS</strong></td><td>Create a randomly generated QR Code that is unique for your customers</td><td></td><td><a href="/files/XvqfEaqdfgvPuMVXGhuc">/files/XvqfEaqdfgvPuMVXGhuc</a></td><td><a href="/pages/efJG2TzOrz6lSQFEBY9V#dynamic-qris">/pages/efJG2TzOrz6lSQFEBY9V#dynamic-qris</a></td></tr><tr><td><strong>Static QRIS</strong></td><td>Create your personal QR Code, print it as a sticker, and paste it on your store</td><td></td><td><a href="/files/20UIGRP2ScSt5qtpDGv8">/files/20UIGRP2ScSt5qtpDGv8</a></td><td><a href="/pages/efJG2TzOrz6lSQFEBY9V#static-qris">/pages/efJG2TzOrz6lSQFEBY9V#static-qris</a></td></tr></tbody></table>

{% hint style="info" %}
Availability: Indonesia only
{% endhint %}

## Overview

QRIS (Quick Response Code Indonesian Standard) is a standardized QR code payment method introduced by Bank Indonesia to simplify digital payments across various payment service providers (PSPs), banks, and merchants in Indonesia. QRIS is designed to streamline the payment acceptance process and enhance interoperability between different payment systems. Customers can make payments by scanning or uploading the QRIS image generated by the merchant, using supported e-Wallet apps (e.g., DOKU e-Wallet, OVO, ShopeePay, GoPay) or mobile banking apps that support QRIS.

***

## QRIS Types

The key difference between static QRIS and dynamic QRIS lies in the flexibility and the type of information encoded.

* **Static QRIS** codes are fixed and do not change. They typically represent the merchant’s general payment information and are used for multiple transactions.
* **Dynamic QRIS** codes are generated uniquely for each transaction. They can include transaction-specific details such as the amount, invoice number, or customer reference, providing greater flexibility for different payment scenarios.

### Dynamic QRIS

* **Variable Information:** A dynamic QRIS code can contain variable information that changes for each transaction.
* **Transaction-Specific:** It can include details such as the transaction amount, order details, and a unique transaction identifier.
* **Use Case:** Dynamic QRIS codes are commonly used in scenarios like online shopping carts, invoice payments, or where the transaction amount or details need to be specified dynamically.

### Static QRIS

* **Fixed QR Code:** A static QRIS code contains fixed information that does not change.
* **Amount Flexibility:** Once generated, the QR code can be used for various types of transactions. The transaction amount may vary, and customers are required to input the amount themselves.
* **Use Case:** Static QRIS codes is ideal for merchants who wish to accept cashless payments without generating a new QR code for each transaction, especially when transaction amounts vary.

{% hint style="info" %}
Activating QRIS with DOKU will enable both Dynamic and Static QRIS.
{% endhint %}

***

## Activation

You can activate QRIS in the DOKU Dashboard by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Account** section, select **Service**
4. On **Service** page, click **ADD SERVICE** button\
   ![](https://s3.amazonaws.com/cdn.freshdesk.com/data/helpdesk/attachments/production/66050961310/original/oCDOUX9kMSZmQ76LMDIq2tSkUaF7nQjFlQ.png?1680119471)
5. Select **QRIS** under QR Payment section\
   ![](/files/74IBRBs68RIZNvs0AZvs)
6. Click **ACTIVATE** button
7. Fill the following fields, then click **ACTIVATE** once again.
   * Brand Short Name: A short version of your brand or business name that customers can easily recognize on their payment screen. This name will be displayed on your QRIS payment page.
   * Merchant Category Code (MCC): A merchant category code that represents your industry.

***

## Accepting Payments

### Methods

Once QRIS has been activated for your business, you can start accepting payments easily and securely through various methods.

**Dynamic QRIS** generates a unique QR code for each transaction. This enables more accurate payment tracking and minimizes the risk of human error. You can accept payments using Dynamic QRIS through the following methods:

* **No-Integration Solutions**
  * [Payment Link](/accept-payments/no-integration-products/payment-link): Generate a unique payment link for each transaction. When a customer accesses the link and selects QRIS as the payment method, a QRIS code will be displayed. The code can be scanned directly or uploaded to a mobile banking app for payment.
  * [Digital Catalog](/accept-payments/no-integration-products/digital-catalog): Create a digital catalog of your products or services, each with a QRIS-enabled checkout. The payment process is similar to Payment Link, providing a seamless experience for your customers.
* **With Integration**
  * [DOKU Checkout](/accept-payments/integration-tools/doku-checkout): Generate QRIS codes using our hosted checkout page, with minimal development required.
  * [Direct API](/accept-payments/integration-tools/direct-api): Generate dynamic QR codes directly from your system using our API. This option is ideal for businesses with custom front-end environments or POS systems that require full control over the checkout experience.

**Static QRIS** uses a fixed QR code that does not change per transaction. It’s ideal for small businesses, physical stores, and merchants who prefer a simpler setup. You can accept payments with Static QRIS as follows:

1. **Print your QRIS image**: Download the static QR code image from DOKU Dashboard.
2. **Display it at your store**: Place the printed QR code at the point of sale — such as on your counter or checkout stand — where it’s easily visible to customers.
3. **Customers scan and pay**: Customers scan the QR code using any QRIS-compatible mobile payment app, enter the transaction amount, and complete the payment.
4. **Get notified (optional)**: Depending on your system configuration, you may receive real-time notifications through the merchant portal, email, or your integrated POS system.

### Key Features

#### Refund via Direct API

DOKU QRIS enables seamless, end-to-end refund processing through [Direct API](/accept-payments/integration-tools/direct-api) integration, eliminating the need for manual work and reducing operational overhead. Merchants can also track status in real-time via API callbacks, ensuring a faster and more reliable experience for end-users. The following is a list of supported issuers for automated refunds:

<details>

<summary>Banking Institutions</summary>

1. Bank BRI
2. Bank Danamon
3. Bank Permata
4. BCA (Bank Central Asia)
5. Bank Digital BCA
6. BCA Syariah
7. Bank Papua
8. Bank Maybank
9. Bank Neo Commerce
10. Bank CIMB
11. Bank Jateng
12. Seabank
13. Bank Jago
14. Bank Jabar (bjb)
15. Bank Aladin Syariah
16. Bank BPD Jatim
17. Mandiri Taspen
18. Bank SMBC (Jenius)
19. BPD Bengkulu
20. Bank SulutGo
21. Krom Bank
22. Bank Sinarmas
23. BPD D.I. Yogyakarta
24. UOB Indonesia

</details>

<details>

<summary>Non-Banks (e-Wallets)</summary>

1. AstraPay
2. LinkAja
3. GoPay
4. Kaspro
5. OVO
6. Airpay / ShopeePay
7. Bimasakti
8. DANA
9. Virgo
10. Gudang Voucher
11. BluePay
12. Paytren
13. OTTOCASH
14. Tmoney
15. i.saku
16. Dipay
17. Saldomu
18. PAC Cash
19. GDC Pay
20. Dutamoney
21. WHIZ
22. Ezeelink Indonesia
23. Finpay
24. Qoin Digital Indonesia
25. PT Nusapay Solusi Indonesia
26. Pakai Donk
27. Yourpay
28. Jawara Mobile
29. Yoopay
30. Singapay

</details>

#### Cross-border Payment

DOKU QRIS allows international customers to pay in their local currency using their native banking apps and e-Wallets, while funds are settled directly to your account in IDR. The following is a list of the supported countries and banking partners for cross-border payment:

<details>

<summary>Malaysia</summary>

1. TNG Digital
2. Maybank
3. Hong Leong Bank
4. BigPay
5. Finexus
6. Bank of China Malaysia
7. Public Bank
8. AmBank
9. Boost
10. OCBC Malaysia
11. FIUU
12. UOB Malaysia
13. Bank Islam
14. MobilityOne
15. SiliconNet
16. Fave

</details>

<details>

<summary>Singapore</summary>

QRIS NETS / SGQR

</details>

<details>

<summary>Thailand</summary>

1. Bangkok Bank
2. Krungsri
3. CIMB Thai
4. Kasikornbank
5. Krungthai Bank
6. SCB

</details>

<details>

<summary>China</summary>

1. Alipay
2. UnionPay
3. ICBC
4. ICBC e-Life
5. e-Qianzhuang
6. Bank of China

</details>

<details>

<summary>South Korea</summary>

1. GLN International
2. Woori Card
3. KB Kookmin Bank
4. Shinhan Bank
5. Bank of China Korea

</details>

***

## FAQ

<details>

<summary>What are the requirements to activate QRIS?</summary>

You will need to submit one of the following documents:

* KTP (Indonesian National ID) for personal/individual merchants
* NPWP (Tax Identification Number) for corporate merchants

Please ensure that the documents are clearly uploaded and successfully verified through your DOKU Dashboard. This is especially important for merchants with OCO Client ID, as verification is a prerequisite for QRIS activation.

</details>

<details>

<summary>How long does it take for QRIS to be activated?</summary>

QRIS activation typically takes 1–2 working days after all required documents have been submitted and verified. Delays may occur if the documents are incomplete or fail verification checks.

</details>

<details>

<summary>Can I activate QRIS if my business entity is not based in Indonesia?</summary>

QRIS can only be activated if your business operates in Indonesia, therefore your account type must be 'Corporate'.

</details>

<details>

<summary>How to activate both dynamic and static QRIS?</summary>

By activating QRIS through the DOKU Dashboard, you will gain access to both dynamic and static QRIS. You can view and print your static QRIS image by clicking the **See Details** button on the **Service** page.

</details>

<details>

<summary>How do I check my static QRIS image?</summary>

You can view and print your static QRIS image by clicking the **See Details** button on the **Service** page. Please ensure that QRIS has been activated beforehand.

</details>

<details>

<summary>Can QRIS payments be made using a credit card as the source of funds?</summary>

Yes, QRIS payments can be made using a credit card as the source of funds. However, this depends on whether the user’s payment app or e-wallet supports credit card funding for QRIS transactions. Not all credit cards or issuers are compatible, and additional fees may apply depending on the provider.

</details>


# Virtual Terminal

## Overview

Virtual Terminal by DOKU is a feature that allows businesses to accept payments over the phone, through email, or in person without needing a physical card reader or a traditional point-of-sale (POS) system. Here’s how it works and what it offers:

1. **Accept Payments Anywhere**: With DOKU's virtual terminal, businesses can securely process payments from customers who provide their card details over the phone or through email invoices.
2. **Keyed-in Transactions**: Merchants can manually enter credit card information into DOKU Dashboard or through an integrated system, allowing for flexibility in accepting payments without requiring customers to physically present their cards.
3. **Secure Handling of Payments**: DOKU ensures that all transactions processed through the virtual terminal are secure and compliant with Payment Card Industry Data Security Standard (PCI DSS) requirements, minimizing the risk of fraud or unauthorized access to cardholder data.
4. **Flexibility for Various Business Types**: This feature is particularly useful for businesses that operate in industries such as professional services, where remote payment processing is common and a physical card reader may not be feasible or necessary.

Virtual Terminal expands payment acceptance options for businesses beyond traditional online transactions, offering a convenient and secure way to process payments remotely or in person without requiring specialized hardware.

***

## FAQ

<details>

<summary>What are the requirements to use Virtual Terminal?</summary>

You are required to have a non-3DS MID that is created by the acquiring bank. Please contact your account manager or sales representative for this request. If you don't have an account manager, please fill and submit [this](https://www.doku.com/en-US/contact-sales?utm_source=docs) form.

</details>

<details>

<summary>Why am I unable to access Virtual Terminal page?</summary>

You are required to activate card MOTO services and set up the non-3DS MID that is created by the acquiring bank. Please contact your account manager or sales representative for this request. If you don't have an account manager, please fill and submit [this](https://www.doku.com/en-US/contact-sales?utm_source=docs) form.

</details>


# Integration Tools

Various ways to integrate with DOKU to accept payments

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>DOKU Checkout</strong></td><td>Customizable DOKU-hosted checkout page that can be embed in your website</td><td></td><td><a href="/files/VA5z3RhwiP5hD9J2rlbk">/files/VA5z3RhwiP5hD9J2rlbk</a></td><td><a href="/pages/Xt9Sb9VzggMdzyXEHU7Y">/pages/Xt9Sb9VzggMdzyXEHU7Y</a></td></tr><tr><td><strong>Direct API</strong></td><td>Use your own custom payment page with your own branding with Direct API integration</td><td></td><td><a href="/files/0y9qaBv2ZIHlLOvbXkbb">/files/0y9qaBv2ZIHlLOvbXkbb</a></td><td><a href="/pages/6xrMxCsnqCLZjFK6HBFr">/pages/6xrMxCsnqCLZjFK6HBFr</a></td></tr><tr><td><strong>e-Commerce and Plugins</strong></td><td>Set up your online business through third-party platforms or plugins</td><td></td><td><a href="/files/ng75zpGHr0ffYUnL7MdZ">/files/ng75zpGHr0ffYUnL7MdZ</a></td><td><a href="/pages/EP5oADKpAPwaQjf3rgo4">/pages/EP5oADKpAPwaQjf3rgo4</a></td></tr><tr><td><strong>SDKs and Libraries</strong></td><td>Minimize effort of integration with libraries containing various popular programming languages and development kits</td><td></td><td><a href="/files/33u8kMFqXselaTIFBk5f">/files/33u8kMFqXselaTIFBk5f</a></td><td><a href="/pages/7G8v7JITnf2c5irkGmRM">/pages/7G8v7JITnf2c5irkGmRM</a></td></tr><tr><td><strong>DOKU MCP Server</strong></td><td>Integrate DOKU’s payment APIs for payment processing and transaction management with AI-powered tools</td><td></td><td><a href="/files/g4Tk0RpN5uii7yeCSndK">/files/g4Tk0RpN5uii7yeCSndK</a></td><td><a href="/pages/RwXQY2b29Gb2P3hlhGss">/pages/RwXQY2b29Gb2P3hlhGss</a></td></tr></tbody></table>


# DOKU Checkout

With DOKU Checkout, there's no need to build your own payment page

DOKU Checkout is an API that enables you to use DOKU-hosted payment page that can either be redirected or embedded to your website. This is the easiest and the quickest method to integrate with DOKU as you are not required to build your own payment page.&#x20;

<table><thead><tr><th>Features</th><th width="294.33345540364576">Description</th><th>ID Business Account</th><th>MY Business Account</th></tr></thead><tbody><tr><td>Logo and Brand Name</td><td>To ensure that your customers know that they are making payment in the right page, you can <strong>adjust your brand name</strong> and also <strong>insert your brand logo</strong>.</td><td>✅ Available</td><td>✅ Available</td></tr><tr><td>Payment Method Settings</td><td>After activating the selected payment methods of your choice, you may freely <strong>sort the arrangement of the payment methods</strong> that is shown on the checkout page; we suggest to sort in the order of the most used payment method by your customer.<br><br>You may also choose to <strong>show or hide certain payment methods</strong> that you don't want to appear on your checkout page.</td><td>✅ Available</td><td>✅ Available</td></tr><tr><td>Color Settings</td><td>Set the appearance of your checkout by changing your color palette and time format.</td><td>✅ Available</td><td>✅ Available</td></tr><tr><td>Language Settings</td><td>Whether your customers are local-or-international-based, you can freely <strong>adjust the default language</strong> of the checkout page.</td><td>✅ Available</td><td>✅ Available</td></tr><tr><td>Expiration Date</td><td>The default expiration date of checkout page is 60 minutes, but you can <strong>freely set the expiration date</strong> based on your requirements. </td><td>✅ Available</td><td>✅ Available</td></tr><tr><td>Google Analytics</td><td>If you wish to track the usage of the checkout page through Google Analytics, you may simply input Google Analytics Tracking ID in the settings.</td><td>✅ Available</td><td>🚫 Unavailable</td></tr><tr><td>Promo Code</td><td>Enable your customers to <strong>apply promo code to their purchases</strong> with DOKU Checkout.</td><td>✅ Available</td><td>🚫 Unavailable</td></tr></tbody></table>

{% hint style="info" %}
You can try DOKU Checkout by using our demo [here](https://sandbox.doku.com/demo/checkout-api), or immediately integrate with our API by following the guide [here](https://developers.doku.com/accept-payment/doku-checkout).
{% endhint %}


# Customize Checkout Page

Customize the interface of your DOKU Checkout page

## Sort Payment Method

You can sort and show/hide payment methods you have activated for your Business Account on your checkout page by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Accept Payments** section, select **Checkout Appearance**
4. **Checkout Page Configuration** page will appear, then click **Payment Method Settings** tab where you can sort the payment methods by dragging the payment method to the desired order, and show/hide the payment methods by ticking or unticking the payment method
5. Click **Save** to save your configuration

***

## Customize Interface

You can further customize the interface/appearance of your checkout page by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Accept Payments** section, select **Checkout Appearance**
4. **Checkout Page Configuration** page will appear, then click **Interface Settings** tab where you will find several options for customizing the look and feel of your checkout page, including the ability to add/change your logo and change the background color that fits your brand
5. Click **Save** to save your configuration

***

## Set Up Expiry Time

You can set up the default expiry time of your checkout page by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Accept Payments** section, select **Checkout Appearance**
4. **Checkout Page Configuration** page will appear, then click **Expired Settings** tab where you can fill the default expiry time of your checkout page by hours and/or minutes in the **Due Date** field
5. Click **Save** to save your configuration

***

## FAQ

<details>

<summary>How to change the merchant name shown on my DOKU Checkout page?</summary>

The business/brand name on your Checkout Page is based on the brand name that you registered. You can update your brand name by following the guide on [Update Business Data](/get-started/manage-business/update-business-data).

Please note that changing your business/brand name is subject to approval by our Risk Screening team.

</details>

<details>

<summary>Why is my payment method missing on the checkout page?</summary>

A payment method may not appear on the checkout page if:

* It has not been activated for your account, or
* Its status is still inactive.

Please refer to the activation guide on [Manage Payment Methods](/get-started/manage-business/manage-payment-methods) to check and confirm whether your payment method is active.

</details>


# Configure Notifications

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only
{% endhint %}

## Set Up Notifications

With DOKU Checkout, you can configure email notifications to keep your customers informed about their order status in real time. This helps improve communication, reduce payment delays, and enhance the overall customer experience. You can configure email notifications for DOKU Checkout by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Notifications** section, select **Checkout Page Notifications**
4. **Checkout Page Notifications** page will appear, then select the email notifications you wish to send to customers based on the following fields:
   1. Order Status
      1. New Order – The order has been created but not yet paid
      2. Successful Order – The order has been successfully paid
      3. Failed Order – The order failed to process
      4. Expired Order – The order was not paid before the expiration time
      5. Almost Expired – The order is approaching its expiration time
         * The near-expiry-time can be set in days, hours, minutes, and seconds
         * The notification schedule must be set before the payment due date
   2. **Channel**: Tick **Email** to enable email notifications
   3. **Merchant Notification**: Choose whether you would also like to receive the notifications as your customers. You can configure up to 5 additional email recipients&#x20;
5. Click **Save** to save your configuration.

***

## Customize Email Appearance

You may do so by following these simple steps:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Notifications** section, select **Checkout Page Notifications**
4. **Checkout Page Notifications** page will appear, then select **Email Appearance** tab where you can can customize the following components:
   1. Logo
   2. Header and Button Colors
   3. Header, Button, and Footer text
5. Click **Save** to apply your customizations.

***

## FAQ

<details>

<summary>If I activated the Recovered Abandoned Cart, will my customers receive an email notification?</summary>

Yes. DOKU will automatically send an email notification for expired orders. The email includes the extended expiry date information and prompts customers to complete their payment.

</details>

<details>

<summary>How to start integration for Checkout Email Notifications?</summary>

In order to enable email notifications for DOKU Checkout, you must include the `customer.email` field in your payment request object. If `customer.email` is not provided, the customer will not receive any email notifications.

For full implementation details, please refer to our [API Reference](https://developers.doku.com/accept-payment/doku-checkout?utm_source=docs).

</details>


# Manage Checkout Orders

## View Checkout Orders

Checkout Order List is a report that provides information about all orders that’ve been created which came from Checkout Page. On this page you can see detailed information about your orders, such as Amount, Transaction Status, Customer Information, and etc. You may do so by following these simple steps:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Reports** from the menu, then choose **Checkout Orders**
3. **Checkout Orders** page will appear, where you can find all the transactions that have been recorded via DOKU Checkout
4. Click **Details** to view the full order information and transaction history

On the **Order Details** tab, you can see general information such as transaction amount, transaction status, and customer Information. On the **Transaction History** tab, you can view the status history of the transaction, which includes every step the customer goes through after selecting a payment method such as payment attempts, success, failure, or expiry.

***

## Recover Checkout Orders

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only
{% endhint %}

DOKU offers a **Recover Abandoned Cart** feature that allows customers to reopen and complete expired orders through a follow-up email up to 3 times. This feature helps increase conversion rates by giving customers a second opportunity to complete their purchase after the original checkout session has expired. You can activate the Recover Abandoned Cart feature by following the steps below:

{% hint style="warning" %}

### Precondition

Before enabling this feature, you must first activate the Expired Order status under Checkout Email Notifications. The Expired Order email acts as the entry point for customers to reopen their abandoned orders. For setup instructions, visit [Configure Notifications](/accept-payments/integration-tools/doku-checkout/configure-notifications#set-up-notifications).
{% endhint %}

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Accept Payments** section, select **Checkout Appearance**
4. **Checkout Page Configuration** page will appear, then click **Expired Settings** tab&#x20;
5. Switch on the toggle for **Activate Recover Abandoned Cart**
6. Set the **Recovery Period**:
   * For example, if you set the recovery period to 7 days, customers will be able to recover and complete their abandoned orders within 7 days after the original order has expired
7. Click **Save** to apply your settings.

***

## Status

<table><thead><tr><th width="195.666748046875">Status</th><th>Description</th></tr></thead><tbody><tr><td><strong>Pending</strong></td><td>The order was created, but the customer has not completed payment within the allowed time.</td></tr><tr><td><strong>Success</strong></td><td>The customer successfully completed the transaction and reached the success result page.</td></tr><tr><td><strong>Expired</strong></td><td>The order was not paid before the payment due date and has expired.</td></tr></tbody></table>

***

## FAQ

<details>

<summary>Why is my order missing in the Checkout Report?</summary>

There may be two possible reasons for a missing order:

* The payment request you made was not successful.
* The date filter applied does not match the order's creation date.

</details>

<details>

<summary>What is the “Recovered” column in the Checkout Order Report?</summary>

The **Recovered** column refers to DOKU’s abandoned cart recovery feature. This feature allows merchants to extend the expiry date of an unpaid order. If a customer completes the payment after the original expiry time, DOKU updates the order status to indicate that it was recovered. This helps merchants easily identify which orders were completed through the recovery process.

</details>


# Direct API

Use your own custom payment page to collect payments

If you wish to implement your own payment page, DOKU provides REST API that you can use to directly integrate with us. We provide code library in various programming languages to help you integrate.&#x20;

With Direct API, you are enabled to create customized payment flows and integrate them directly into your website while still adhering to security and compliance standards. The following are some benefits of integrating with Direct API:

| Benefits                      | Description                                                                                                                                                                                                                                                                                                            |
| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Brand Consistency             | Merchants can maintain a consistent brand experience throughout the entire customer journey, including the checkout process. Customization allows for the i**ncorporation of brand colors, logos, and styles**, reinforcing brand identity.                                                                            |
| Seamless User Experience      | Integration directly into the website ensures a seamless user experience. Customers **stay on the merchant's site** from product selection to payment confirmation, reducing friction and potential drop-offs in the conversion funnel.                                                                                |
| Flexibility and Customization | Developers have the flexibility to design and implement payment flows that align with the specific requirements of the business. Customization **extends to the layout, user interface elements, and user interactions** during the payment process.                                                                   |
| Control Over User Interface   | Merchants and developers have complete control over the look and feel of the payment interface. This control is valuable for creating **user-friendly and intuitive payment forms**, optimizing the checkout process for increased conversions.                                                                        |
| Security Compliance           | DOKU handles the complexities of security compliance, especially compliance with the Payment Card Industry Data Security Standard (PCI DSS). By using DOKUs APIs, merchants can ensure that **sensitive payment information is handled securely** without having to manage intricate security requirements themselves. |
| Scalability                   | DOKU's infrastructure is designed for scalability. Merchants can handle growing transaction volumes **without worrying about the technical challenges** associated with scaling payment processing capabilities.                                                                                                       |

{% hint style="info" %}
You can try Direct API by using our demo [here](https://sandbox.doku.com/demo/direct-api), or immediately integrate with our API by following the guide [here](https://developers.doku.com/accept-payment/direct-api).
{% endhint %}


# e-Commerce and Plugins

Integrate your platform into DOKU using ready-made plugins

Whether you're working with APIs, plugins, or custom-built platforms, DOKU provides the integration tools to match. Pick the option that works best for your system.

* e-Commerce Platform&#x20;
  1. [Shopify](/accept-payments/integration-tools/e-commerce-and-plugins/shopify)
* Plugins
  1. [WordPress (WooCommerce)](/accept-payments/integration-tools/e-commerce-and-plugins/woocommerce-wordpress);
  2. [Magento](/accept-payments/integration-tools/e-commerce-and-plugins/adobe-commerce-magento)


# Shopify

[Shopify](https://www.shopify.com/) is an e-Commerce platform that helps merchants to create and manage online stores without the need of extensive technical knowledge. Shopify is suitable for a wide range of businesses, from small startups to large enterprises. It caters to various industries and allows users to sell physical products, digital goods, and services.

***

## Requirements[​](https://dashboard.doku.com/docs/docs/integrations/platform/shopify-integration#requirements) <a href="#requirements" id="requirements"></a>

Before you integrate your Shopify Store with DOKU, make sure that you have completed the following requirements:

1. Create an online store with [Shopify](https://shopify.com/)
2. Create a [DOKU Business Account](/get-started/create-account#create-your-first-business-account)
3. Create a [DOKU Sandbox Account](/get-started/create-account#create-a-sandbox-account-optional). You can use Shopify Trial Program and test your integration with a DOKU Sandbox Account

***

## Integration Guide <a href="#integration-steps" id="integration-steps"></a>

1. [Indonesia Integration guide](/accept-payments/integration-tools/e-commerce-and-plugins/shopify/shopify-integration)
2. [Malaysia Integartion guide](/accept-payments/integration-tools/e-commerce-and-plugins/shopify/shopify-integration-1)

***

## Activate Payment Methods

You can activate more payment methods for your Shopify store by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Account** section, select **Service**
4. On **Service** page, click **ADD SERVICE**
5. Select the payment method you would like to activate
6. Click **ACTIVATE**.

Notes:

* Some payment methods can be activated instantly.
* Others may require approval from our **Risk Screening Team** before they become active.
* Certain payment methods may also require **credential registration** before activation is complete.
* Certain payment methods may be seen as disabled, because it can only be activated with the assistance of our Sales team. You may contact our Sales team by filling the following [form](https://www.doku.com/en-US/contact-sales?utm_source=docs).

***

## Checkout Page Configuration

By configuring your checkout page, you will be able to:

1. **Show or hide, and sort payment methods for your customers**\
   Choose which payment methods (e.g., cards, e-wallets, and virtual accounts) to appear on your checkout page. You can also reorder them based on your preference or customer behavior to optimize conversions.
2. **Customize the interface**\
   Adjust the look and feel of your checkout page to align with your brand. This includes modifying button colors, fonts, logos, and layout to ensure a seamless and branded customer experience.
3. **Set a default expiry time**\
   Define how long a payment session remains valid before it expires. This is useful for limiting pending transactions and encouraging quicker payments, especially for methods like virtual accounts or retail outlets.

Visit [Customize Checkout Page](/accept-payments/integration-tools/doku-checkout/customize-checkout-page) for more detailed information.

***

## Order Configuration

Order Configuration setting allows you to define how unpaid transactions are handled in your Shopify store. You can choose whether an incomplete payment is treated as an **Abandoned Checkout** or remains in the **Orders** section as **Payment Pending**. This helps you manage your store’s workflow and track customer activity more effectively. You can set the Order Configuration for your Shopify store by following the steps below:

1. Log in to your [Shopify Store](https://www.shopify.com/login)
2. Go to **Settings** > **Payments**
3. On the Shopify Payment Settings page, select **DOKU Payment**
4. Click **More Actions**, then select **Manage**

<figure><img src="/files/fGBzf2bzHpkCVWh65rXP" alt=""><figcaption></figcaption></figure>

5. On DOKU Shopify Configuration page, select **Order Configuration** from the dropdown menu

   <figure><img src="/files/UJlXGEz02Dk0a246DYs8" alt=""><figcaption></figcaption></figure>
6. Under **Order Configuration Type**, select your preferred option:
   * **Abandoned Checkout:** If the customer does not complete the payment, the order will be moved to the **Abandoned Checkouts** section.
   * **Payment Pending:** If the customer does not complete the payment, the order will remain in the **Orders** section.

<figure><img src="/files/gZuO5Y5WznC9e3MVloxI" alt=""><figcaption></figcaption></figure>

***

## Incompatible Plugins

The following plugins are currently incompatible with our Shopify plugin. Using these listed plugins together may cause unexpected behavior or errors.

* [Shopify Flow](https://apps.shopify.com/flow)
  * Issue: When using automation workflows to create transaction, this plugin can trigger automate create payment session, resulting in double invoices being generated.
  * Recommendation: Ensure that Shopify Flow workflows is deactivate when using DOKU payments plugin[​](https://dashboard.doku.com/docs/docs/integrations/platform/shopify-integration#faqs)

***

## FAQ <a href="#faqs" id="faqs"></a>

<details>

<summary>Why is my payment status not updated on Shopify?</summary>

Payment notification URL must be set up on DOKU Dashboard for the transaction status to be updated on Shopify Dashboard. Please be sure to not skip step number 3 in the Integration Guide section.

</details>

<details>

<summary>How to retrieve my integration credentials (Client ID and Secret Key)?</summary>

Please refer to the guide on [Set Up Integration](/get-started/manage-business/set-up-integration#api-keys) to obtain your integration credentials.

</details>

<details>

<summary>Can I customize the expiry time of my Shopify order?</summary>

No, it is currently not possible to customize the expiry time of your Shopify order.

</details>

<details>

<summary>Is it possible to change the payment provider name instead of using DOKU Payment? </summary>

Currently, it is not possible to change the name of the payment provider.

</details>

<details>

<summary>Is integrating my Shopify store with DOKU free of charge?</summary>

Yes, integration with DOKU is free. However, an additional **0.2% fee** is applied on top of the standard transaction fee for each payment method.  For example, a successful transaction with **Bank Transfer** payment method will incur a fee of **IDR 4,000 + 0.2%** (excluding VAT) per transaction via Shopify.

</details>

<details>

<summary>How to enable PayLater payment methods in Shopify?</summary>

There are two requirements to enable PayLater payment methods on Shopify:

1. PayLater payment methods must be activated in your [DOKU Dashboard](https://dashboard.doku.com/bo/dashboard?utm_source=docs)
2. In your Shopify Dashboard, go to **Settings > Checkout**, and enable **Shipping address phone number**

Once the two requirements are met, PayLater payment methods will be available during checkout.

</details>

<details>

<summary>How do I switch payment provider on Shopify to DOKU?</summary>

You can only switch the payment provider once you have uninstalled the existing payment service provider app. Once uninstallation is completed, you can follow our [#integration-steps](#integration-steps "mention") for Shopify.

</details>

<details>

<summary>Is it possible to switch Shopify store but use my existing business account?</summary>

Yes, you can use your existing business account with a different store. However, you must uninstall the app from the current store and complete the integration process again by following our [#integration-steps](#integration-steps "mention") for Shopify.

Please note that the new store must use the same brand name. Using a different brand name may result in account suspension.

</details>

<details>

<summary>My transaction failed to be processed on Shopify. What should I do?</summary>

A common reason for a failed transaction is the use of non-alphabetic characters by your customer. Our system only supports alphabetic characters, so please ensure that all input consists solely of alphabetic characters.

If the transaction still fails to process after confirming the input is alphabetic, please submit a support ticket or send an email to [care@doku.com](mailto:care@doku,cin), and our team will assist you in troubleshooting the issue.

</details>

<details>

<summary>Why is my customer’s phone number on the DOKU checkout page different from what they entered on the Shopify checkout page?</summary>

This behavior is expected due to how Shopify and DOKU handle customer contact details. Shopify only provides a single field labeled **“Email/phone number”**, and depending on what the customer enters (email or phone), the other field may be left blank or auto-filled with a placeholder on the **DOKU Checkout Page**, which **requires both email and phone number**.\
If a customer enters only a phone number in Shopify, a dummy email or phone may appear on the DOKU page, and vice versa. This is a current limitation and cannot be prevented at this time.

</details>


# 🇮🇩 Shopify Integration

Integration Guide for Shopify users in Indonesia

## Integration Guide <a href="#integration-steps" id="integration-steps"></a>

This integration guide consists of 3 **mandatory** steps:

1. Install DOKU Payment App on Shopify App Store
2. Configure DOKU Payment App
3. Set Up Payment Notification on DOKU Dashboard[​](https://dashboard.doku.com/docs/docs/integrations/platform/shopify-integration#install-doku-payment-for-shopify)

{% embed url="<https://www.youtube.com/watch?v=pNgRDh_dWZ4>" %}

#### Step 1: lnstall DOKU Payment App on Shopify App Store

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs)
2. Log in to your [Shopify Store](https://www.shopify.com/login)

<figure><img src="/files/MKMbJsQ3AAilGZBtlX17" alt=""><figcaption></figcaption></figure>

3. lnstall [DOKU Payment App ](https://apps.shopify.com/doku-payment-gateway)on Shopify App Store

<figure><img src="/files/wZkmiags7YkF9w4VKVgp" alt=""><figcaption></figcaption></figure>

#### Step 2: Configure DOKU Payment App

1. On **DOKU Payment** Configuration page, select **DOKU Indonesia**
2. Configure the following required fields:
   * **Sandbox Client ID**: Client ID retrieved from [DOKU Sandbox](https://sandbox.doku.com/bo/developer/api-keys?utm_source=docs)
   * **Sandbox Secret Key**: Secret Key retrieved from [DOKU Sandbox](https://sandbox.doku.com/bo/developer/api-keys?utm_source=docs)
   * **Production Client ID**: Client ID retrieved from [DOKU Dashboard](https://dashboard.doku.com/bo/developer/api-keys?utm_source=docs)
   * **Production Secret Key**: Secret Key retrieved from [DOKU Dashboard](https://dashboard.doku.com/bo/developer/api-keys?utm_source=docs)

{% hint style="info" %}
Visit [Set Up Integration](/get-started/manage-business/set-up-integration#api-keys) for instructions on how to retrieve integration credentials (Client ID and Secret Key)
{% endhint %}

<figure><img src="/files/XppdASQ2pzxezfHySCqQ" alt=""><figcaption></figcaption></figure>

3. Click **Continue Integration With Shopify**
4. You will be redirected to the **Payment Settings** page in Shopify Admin Dashboard, where you can switch on the toggles for the payment icons you wish to display on your Shopify checkout page. (**Important Note:** The payment icons on the Shopify checkout page are only for display and do not indicate the actual payment methods that are available for payment).

<figure><img src="/files/EWGfKu9vEeo80uKb9YfG" alt=""><figcaption><p>Payment Settings on Shopify Admin Dashboard</p></figcaption></figure>

<figure><img src="/files/PQCqbuntcF3zjWQeRcur" alt=""><figcaption><p>Shopify Checkout Page</p></figcaption></figure>

5. Scroll down and click **Activate**

<figure><img src="/files/ce2efwKuAM1NNvDrjgKP" alt=""><figcaption></figcaption></figure>

#### Step 3: Set Up Payment Notification on DOKU Dashboard

{% hint style="warning" %}
If you skip this step, your payment status on Shopify Dashboard will not be synced with DOKU Dashboard
{% endhint %}

1. Copy the below **Notification URL** dedicated for DOKU Payments on Shopify

```
https://api.doku.com/middle/v2/shopify/notify
```

2. Log in to your **DOKU Dashboard**
   * For testing transactions, visit [DOKU Sandbox](https://sandbox.doku.com/bo/login?utm_source=docs)
   * For processing real transactions, visit [DOKU Dashboard](https://dashboard.doku.com/bo/dashboard?utm_source=docs)
3. Navigate to **Settings** > **Payments Settings**, then go to each payment method settings page

<figure><img src="/files/YVsMw43nyUpXbsrEse3h" alt="" width="563"><figcaption></figcaption></figure>

4. Set up the payment notification URL for **each payment method** that you have activated using the notification URL that you have copied earlier. Visit [Webhook / Payment Notification](/get-started/manage-business/set-up-integration/webhook-payment-notification#set-up-payment-notification) for detailed instructions

Once payment notification has been configured, you can start accepting payments with DOKU.

***

***

## Testing Payments[​](https://dashboard.doku.com/docs/docs/integrations/platform/shopify-integration#testing-the-payment-in-sandbox-mode) <a href="#testing-the-payment-in-sandbox-mode" id="testing-the-payment-in-sandbox-mode"></a>

{% hint style="info" %}
Please ensure your sandbox credentials have been set up during your integration in[#step-2-configure-doku-payment-with-shopify](#step-2-configure-doku-payment-with-shopify "mention").
{% endhint %}

You can simulate transactions in your Shopify store using [DOKU Sandbox](https://sandbox.doku.com/bo/login?utm_source=docs) by following the steps below:

1. Log in to your [Shopify Store](https://www.shopify.com/login)
2. Go to **Settings > Payment**
3. Under **Supported Payment Methods** section, select **DOKU Payment**
4. Scroll down to **Test Mode** section and ensure that the toggle is switched on
5. Click **Save**&#x20;
6. Visit your Shopify storefront and check out a product
7. At checkout, select **DOKU Payment** as your payment method
8. You will be redirected to DOKU Checkout page, where you can select your preferred payment method
9. Complete the payment using DOKU Sandbox Simulator. Visit [Webhook / Payment Notification](/get-started/manage-business/set-up-integration/webhook-payment-notification#simulate-transactions) to learn how to use the payment simulator
10. Upon completion of the payment, you will be redirected back to your store. The transaction will be marked as completed, and the order will be confirmed.


# 🇲🇾 Shopify Integration

Integration Guide for Shopify users in Malaysia

## Integration Guide <a href="#integration-steps" id="integration-steps"></a>

This integration guide consists of 3 **mandatory** steps:

1. Install DOKU Payment App on Shopify App Store
2. Configure DOKU Payment App
3. Set Up Payment Notification on DOKU Dashboard

#### Step 1: lnstall DOKU Payment App on Shopify App Store

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs)
2. Log in to your [Shopify Store](https://www.shopify.com/login)

<figure><img src="/files/MKMbJsQ3AAilGZBtlX17" alt=""><figcaption></figcaption></figure>

3. lnstall [DOKU Payment App ](https://apps.shopify.com/doku-payment-gateway)on Shopify App Store

<figure><img src="/files/wZkmiags7YkF9w4VKVgp" alt=""><figcaption></figcaption></figure>

#### Step 2: Configure DOKU Payment App

1. On **DOKU Payment** Configuration page, select **DOKU Malaysia**
2. Configure the following required fields:
   * **Sandbox Client ID**: Client ID retrieved from [DOKU Sandbox](https://sandbox.doku.com/bo/developer/api-keys?utm_source=docs)
   * **Sandbox Secret Key**: Secret Key retrieved from [DOKU Sandbox](https://sandbox.doku.com/bo/developer/api-keys?utm_source=docs)
   * **Production Client ID**: Client ID retrieved from [DOKU Dashboard](https://dashboard.doku.com/bo/developer/api-keys?utm_source=docs)
   * **Production Secret Key**: Secret Key retrieved from [DOKU Dashboard](https://dashboard.doku.com/bo/developer/api-keys?utm_source=docs)

{% hint style="info" %}
Visit [Set Up Integration](/get-started/manage-business/set-up-integration#api-keys) for instructions on how to retrieve integration credentials (Client ID and Secret Key)
{% endhint %}

{% hint style="info" %}
For Malaysia sandbox account, register at [DOKU Sandbox Registration](https://sandbox.doku.com/bo/sandbox-registration=country=MY)
{% endhint %}

<figure><img src="/files/rzU431FfDl91VUWjT7cQ" alt=""><figcaption></figcaption></figure>

3. Click **Continue Integration With Shopify**
4. You will be redirected to the **Payment Settings** page in Shopify Admin Dashboard, where you can switch on the toggles for the payment icons you wish to display on your Shopify checkout page. (**Important Note:** The payment icons on the Shopify checkout page are only for display and do not indicate the actual payment methods that are available for payment).

<figure><img src="/files/EWGfKu9vEeo80uKb9YfG" alt=""><figcaption><p>Payment Settings on Shopify Admin Dashboard</p></figcaption></figure>

<figure><img src="/files/PQCqbuntcF3zjWQeRcur" alt=""><figcaption><p>Shopify Checkout Page</p></figcaption></figure>

5. Scroll down and click **Activate**

<figure><img src="/files/ce2efwKuAM1NNvDrjgKP" alt=""><figcaption></figcaption></figure>

#### Step 3: Set Up Payment Notification on DOKU Dashboard

{% hint style="warning" %}
If you skip this step, your payment status on Shopify Dashboard will not be synced with DOKU Dashboard
{% endhint %}

1. Copy the below **Notification URL** dedicated for DOKU Payments on Shopify

```
https://api.doku.com/middle/v2/shopify/notify
```

2. Log in to your **DOKU Dashboard**
   * For testing transactions, visit [DOKU Sandbox](https://sandbox.doku.com/bo/login?utm_source=docs)
   * For processing real transactions, visit [DOKU Dashboard](https://dashboard.doku.com/bo/dashboard?utm_source=docs)
3. Navigate to **Settings** > **Webhook,** and create webhook
   1. Description: Shopify Webhook
   2. URL Endpoint: Notification URL from step 1
   3. Payment Channel: Select all payment methods.
4. If you have Card payments activated, Navigate to **Settings > Credit Card**
   1. Go to **Payment Configuration** tab
   2. Paste the Notification URL in the **Payment Notification URL** section
   3. Click **Submit**

***

## Testing Payments[​](https://dashboard.doku.com/docs/docs/integrations/platform/shopify-integration#testing-the-payment-in-sandbox-mode) <a href="#testing-the-payment-in-sandbox-mode" id="testing-the-payment-in-sandbox-mode"></a>

{% hint style="info" %}
Please ensure your sandbox credentials have been set up during your integration in[#step-2-configure-doku-payment-with-shopify](#step-2-configure-doku-payment-with-shopify "mention").
{% endhint %}

You can simulate transactions in your Shopify store using [DOKU Sandbox](https://sandbox.doku.com/bo/login?utm_source=docs) by following the steps below:

1. Log in to your [Shopify Store](https://www.shopify.com/login)
2. Go to **Settings > Payment**
3. Under **Supported Payment Methods** section, select **DOKU Payment**
4. Scroll down to **Test Mode** section and ensure that the toggle is switched on
5. Click **Save**&#x20;
6. Visit your Shopify storefront and check out a product
7. At checkout, select **DOKU Payment** as your payment method
8. You will be redirected to DOKU Checkout page, where you can select your preferred payment method
9. Complete the payment using the provided simulator
10. Upon completion of the payment, you will be redirected back to your store. The transaction will be marked as completed, and the order will be confirmed.


# WooCommerce (WordPress)

[WooCommerce](https://woocommerce.com/) is a WordPress plugin that transforms a WordPress website into a fully functional e-Commerce platform. WooCommerce enables website owners to set up online stores with ease. It provides a range of features for managing products, inventory, orders, and payments, making it a popular choice for businesses and individuals looking to establish an online presence for selling goods or services. With WooCommerce, users can customize their online stores and leverage various extensions and themes to enhance the functionality and appearance of their e-Commerce websites.

***

## Requirements

Before you integrate your WordPress website with DOKU, make sure that you have fulfilled the following requirements:

1. Create a website with [WordPress](https://wordpress.org/)
2. Create a [DOKU Business Account](/get-started/create-account#create-your-first-business-account)
3. WordPress version 5.6 or higher. This plugin is tested with Wordpress 6.7.2
4. WooCommerce version 4.9.0 or higher. This plugin is tested with WooCommerce v10.0.0
5. PHP version 8.2 or higher
6. MySQL version 5.6 or higher

***

## Integration Guide

1. [Indonesia Integration Guide](/accept-payments/integration-tools/e-commerce-and-plugins/woocommerce-wordpress/woocommerce-integration)
2. [Malaysia Integration Guide](/accept-payments/integration-tools/e-commerce-and-plugins/woocommerce-wordpress/woocommerce-integration-1)

***

## Activate Payment Methods

You can activate more payment methods for your WooCommerce store by following the steps below:

1. Log in to [DOKU Dashboard](https://dashboard.doku.com/bo/login?utm_source=docs), and then access the side navigation bar
2. Select **Settings** from the menu
3. **Settings** page will appear. Under **Account** section, select **Service**
4. On **Service** page, click **ADD SERVICE**
5. Select the payment method you would like to activate
6. Click **ACTIVATE**.

Notes:

* Some payment methods can be activated instantly.
* Others may require approval from our **Risk Screening Team** before they become active.
* Certain payment methods may also require **credential registration** before activation is complete.
* Certain payment methods may be seen as disabled, because it can only be activated with the assistance of our Sales team. You may contact our Sales team by filling the following [form](https://www.doku.com/en-US/contact-sales?utm_source=docs).

***

## Checkout Page Configuration

By configuring your checkout page, you will be able to:

1. **Show or hide, and sort payment methods for your customers**\
   Choose which payment methods (e.g., cards, e-wallets, and virtual accounts) tp appear on your checkout page. You can also reorder them based on your preference or customer behavior to optimize conversions.
2. **Customize the interface**\
   Adjust the look and feel of your checkout page to align with your brand. This includes modifying button colors, fonts, logos, and layout to ensure a seamless and branded customer experience.
3. **Set a default expiry time**\
   Define how long a payment session remains valid before it expires. This is useful for limiting pending transactions and encouraging quicker payments, especially for methods like virtual accounts or retail outlets.

Visit [Customize Checkout Page](/accept-payments/integration-tools/doku-checkout/customize-checkout-page) for more detailed information.

***

## Error Log

​Error log, also known as `doku_log`, helps simplify the process of identifying issues related to the payment process when using the DOKU Plugin. If any issues arise while using the plugin, you can contact our support team and provide the `doku_log` file to assist with troubleshooting. The `doku_log` file records all transaction activity by date, regardless of the payment method used.

**How to Enable and Access the doku\_log:**

1. Open the `WooCommerce_dir` directory on your store’s web server.
2. Create a new folder named `doku_log` in your store’s directory. This enables the plugin to automatically log activity to your web server.
3. Navigate to the `doku_log` folder and open the log file corresponding to the date of the issue.
4. You can view or download the log file as needed.

If an issue occurs, please send the relevant `doku_log` file to our support team. This helps us investigate and resolve the issue more efficiently.

***

## Incompatible Plugins

The following plugins are currently incompatible with our WooCommerce plugin. Using these listed plugins together may cause unexpected behavior or errors.

* [Query Monitor](https://wordpress.org/plugins/query-monitor/)
  * Issue: Known to interfere with the DOKU payment option, causing it to not display during checkout.
  * Recommendation: Deactivate Query Monitor on production environments when using DOKU.

***

## FAQ

<details>

<summary>How to retrieve my integration credentials (Client ID and Secret Key) ?</summary>

Please refer to the guide on [Set Up Integration](/get-started/manage-business/set-up-integration#api-keys) to obtain your integration credentials.

</details>

<details>

<summary>Why is my payment status not updated on WooCommerce?</summary>

Payment notification URL must be set up on DOKU Dashboard for the transaction status to be updated on WooCommerce Dashboard. Please be sure to not skip step number 3 in the Integration Guide section.

</details>


# 🇮🇩 WooCommerce Integration

Integration Guide for WooCommerce users in Indonesia

## Integration Guide

This integration guide consists of 3 **mandatory** steps:

1. Install DOKU Plugin on WooCommerce
2. Configure DOKU Payment in WooCommerce
3. Set Up Payment Notification on DOKU Dashboard

#### Step 1: Install DOKU Plugin on WooCommerce

<figure><img src="/files/G5WA2MZyQuQxFB8Q4FZd" alt="" width="563"><figcaption></figcaption></figure>

1. Log in to your Wordpress Dashboard
2. Navigate to **Plugins** > **Add New Plugin**
3. Search for **DOKU Payment**, then click **Install Now**

#### Step 2: Configure DOKU Payment in WooCommerce

<figure><img src="/files/BHcT48rQldl6193yWQA1" alt="" width="563"><figcaption></figcaption></figure>

1. Go to **WooCommerce** > **Settings** > **Payments** tab
2. Make sure **DOKU-Checkout** and **DOKU General-Configuration** are enabled, then click **Manage** on **DOKU General-Configuration**.
3. Configure the following required fields:
   * **Enable DOKU**: Checkbox must be ticked
   * **Environment**
     * For testing transactions, select **Sandbox**
     * For processing real transactions, select **Production**
   * **Credential**
     * **Sandbox Client ID**: Client ID retrieved from [DOKU Sandbox](https://sandbox.doku.com/bo/developer/api-keys?utm_source=docs)
     * **Sandbox Secret Key**: Secret Key retrieved from [DOKU Sandbox](https://sandbox.doku.com/bo/developer/api-keys?utm_source=docs)
     * **Production Client ID**: Client ID retrieved from [DOKU Dashboard](https://dashboard.doku.com/bo/developer/api-keys?utm_source=docs)
     * **Production Secret Key**: Secret Key retrieved from [DOKU Dashboard](https://dashboard.doku.com/bo/developer/api-keys?utm_source=docs)
     * <mark style="background-color:yellow;">Enter the Client ID and Secret Key that match the selected environment. Leave the fields for other environments empty.</mark>
   * **Expiry Time**: Checkout page expiry time in minutes
   * **Abandoned Checkout:** Checkout link can be extended past expiry time if toggled on
   * **Duration Abandoned Checkout:** Maximum time the checkout link stays active after expiration

{% hint style="info" %}
Visit [Set Up Integration](/get-started/manage-business/set-up-integration#api-keys) for instructions on how to retrieve integration credentials (Client ID and Secret Key)
{% endhint %}

#### Step 3: Set Up Payment Notification on DOKU Dashboard

{% hint style="warning" %}
If you skip this step, your payment status on WooCommerce Dashboard will not be synced with DOKU Dashboard
{% endhint %}

<figure><img src="/files/hUa4QvyBGYjE97kz8oJO" alt="" width="563"><figcaption></figcaption></figure>

1. Copy the **Notification URL** from the WooCommerce settings (DOKU-General Configuration)
2. Log in to your **DOKU Dashboard**
   * For testing transactions, visit [DOKU Sandbox](https://sandbox.doku.com/bo/login?utm_source=docs)
   * For processing real transactions, visit [DOKU Dashboard](https://dashboard.doku.com/bo/dashboard?utm_source=docs)
3. Navigate to **Settings** > **Payments Settings**, then go to each payment method settings page

<figure><img src="/files/YVsMw43nyUpXbsrEse3h" alt="" width="563"><figcaption></figcaption></figure>

4. Set up the payment notification URL for each payment method that you have activated using the notification URL that you have copied earlier from the WooCommerce settings. Visit [Webhook / Payment Notification](/get-started/manage-business/set-up-integration/webhook-payment-notification#set-up-payment-notification) for detailed instructions

Once payment notification has been configured, you can start accepting payments with DOKU.

{% hint style="info" %}
You can use the `....doku/notification` endpoint for all payment methods (including QRIS) if you are using WooCommerce version **1.3.26** and above.
{% endhint %}


# 🇲🇾 WooCommerce Integration

Integration Guide for WooCommerce users in Malaysia

## Integration Guide

This integration guide consists of 4 **mandatory** steps:

1. Download Woocomerce Plugin
2. Install DOKU Plugin on WooCommerce
3. Configure DOKU Payment in WooCommerce
4. Set Up Payment Notification on DOKU Dashboard

#### Step 1: Download WooCommerce Plugin

<figure><img src="/files/NUXNEz0hJ1Ec2kvD3Q89" alt=""><figcaption></figcaption></figure>

Download the Zip file from the Woocommerce Integration page

1. Login to DOKU dashboard
2. Go to Integration from the side bar, choose Woocomerce
3. Click on Download button

#### Step 2: Install DOKU Plugin on WooCommerce

<figure><img src="/files/kzVNGtCPccvqX6GVxCOJ" alt=""><figcaption></figcaption></figure>

Before installing DOKU Payment, ensure that WooCommerce is already installed and activated on your WordPress site.

1. Go to Plugins from the sidebar then click on Add Plugin -> Upload Plugin
2. Upload the Zip File (from step 1) -> Install Now - > Activate

#### Step 3: Configure DOKU Payment in WooCommerce

<figure><img src="/files/RsPFwMWGI4UOcVySpGkg" alt=""><figcaption></figcaption></figure>

1. Go to WooCommerce (in sidebar) > Settings > Payments tab.
2. Make sure **DOKU Integration** and **DOKU Payments** are enabled and **click** **Manage** on **DOKU Integration**
3. Configure the following required fields:
   * **Enable DOKU**: Checkbox must be ticked
   * **Environment**
     * For testing transactions, select **Sandbox**
     * For processing real transactions, select **Production**
   * **Credential**
     * **Sandbox Client ID**: Client ID retrieved from [DOKU Sandbox](https://sandbox.doku.com/bo/developer/api-keys?utm_source=docs)
     * **Sandbox Secret Key**: Secret Key retrieved from [DOKU Sandbox](https://sandbox.doku.com/bo/developer/api-keys?utm_source=docs)
     * **Production Client ID**: Client ID retrieved from [DOKU Dashboard](https://dashboard.doku.com/bo/developer/api-keys?utm_source=docs)
     * **Production Secret Key**: Secret Key retrieved from [DOKU Dashboard](https://dashboard.doku.com/bo/developer/api-keys?utm_source=docs)
     * <mark style="background-color:yellow;">Enter the Client ID and Secret Key that match the selected environment. Leave the credential fields for other environments empty.</mark>
   * **Expiry Time**: Checkout page expiry time in minutes
   * **Abandoned Checkout:** Checkout link can be extended past expiry time if toggled on
   * **Duration Abandoned Checkout:** Maximum time the checkout link stays active after expiration

{% hint style="info" %}
Visit [Set Up Integration](/get-started/manage-business/set-up-integration#api-keys) for instructions on how to retrieve integration credentials (Client ID and Secret Key)
{% endhint %}

{% hint style="info" %}
For Malaysia sandbox account, register at [DOKU Sandbox Registration](https://sandbox.doku.com/bo/sandbox-registration=country=MY)
{% endhint %}

#### Step 4: Set Up Payment Notification on DOKU Dashboard

{% hint style="warning" %}
If you skip this step, your payment status on WooCommerce Dashboard will not be synced with DOKU Dashboard
{% endhint %}

<figure><img src="/files/Ikwej72E2pfD9GSfrJOT" alt=""><figcaption></figcaption></figure>

1. Copy the **Notification URL** inside the DOKU Integration Settings (Woocomerce Dashboard)
2. Log in to your **DOKU Dashboard**
   * For testing transactions, visit [DOKU Sandbox](https://sandbox.doku.com/bo/login?utm_source=docs)
   * For processing real transactions, visit [DOKU Dashboard](https://dashboard.doku.com/bo/dashboard?utm_source=docs)
3. Navigate to **Settings** > **Webhook,** and create webhook
   1. Description: WooCommerce Webhook
   2. URL Endpoint: Notification URL from step 1
   3. Payment Channel: Select all payment methods.
4. If you have Card payments activated, Navigate to **Settings > Credit Card**
   1. Go to **Payment Configuration** tab
   2. Paste the Notification URL in the **Payment Notification URL** section
   3. Click **Submit**

{% hint style="info" %}
You can use the `....doku/notification` endpoint for all payment methods (including QRIS) if you are using WooCommerce version **1.3.26** and above.
{% endhint %}


# Adobe Commerce (Magento)

[Adobe Commerce](https://business.adobe.com/products/magento/magento-commerce.html) (Magento) is an e-Commerce platform built on open source technology which provides online merchants with a flexible shopping cart system, as well as control over the look, content and functionality of their online stores. Magento offers powerful marketing, search engine optimization, and catalog-management tools. Magento's ability to scale allows shops with only a few products and simple needs to easily expand to tens of thousands of products and complex custom behavior without changing platforms.

***

## Requirements

Before integrating your Magento store with DOKU, please ensure that the following requirements have been met:

1. Create a store with [Magento](https://business.adobe.com/products/magento/magento-commerce.html)
2. Create a [DOKU Business Account](/get-started/create-account#create-your-first-business-account)
3. Magento version 2.3 or higher. This plugin is tested with Magento v2.3.4, v.2.3.6, v.2.4.0, v.2.4.1
4. PHP version 7.4.0 or higher
5. MySQL version 8.0 or higher

***

## Integration Guide

#### Step 1: Install DOKU Plugin for Magento

1. Download [DOKU Plugin for Magento](https://github.com/PTNUSASATUINTIARTHA-DOKU/doku-magento-plugin)
2. Copy `Jokul` folder into your `MAGENTO_DIR/app/code` directory on your store's webserver.
3. Run `php bin/magento module:status`. You should see `Jokul_Magento2` on list of disabled modules.
4. Run `php bin/magento module:enable Jokul_Magento2`
5. Run `php bin/magento setup:upgrade`
6. Run `php bin/magento module:status` again to ensure `Jokul_Magento2` is enabled already.
7. Flush Magento cache by running `php bin/magento cache:flush`
8. Compile Magento with newly added module by running `php bin/magento setup:di:compile`
9. Flush Magento cache again `php bin/magento cache:flush`​

#### Step 2: Plugin Setup

1. Log in to your Magento Admin Panel
2. Navigate to **Stores** > **Configuration**
3. Go to **Sales** > **Payment Methods**
4. Locate **DOKU** section
5. Click the dropdown arrow icon to view the details
6. Configure the following required fields:

   * **Environment**:&#x20;
     * For testing transactions, select **Sandbox**
       * **Sandbox Client ID**: Client ID retrieved from [DOKU Sandbox](https://sandbox.doku.com/bo/developer/api-keys)
       * **Sandbox Secret Key**: Secret Key retrieved from [DOKU Sandbox](https://sandbox.doku.com/bo/developer/api-keys)
     * For processing real transactions, select **Production**
       * **Production Client ID**: Client ID retrieved from [DOKU Dashboard](https://dashboard.doku.com/bo/developer/api-keys)
       * **Production Secret Key**: Secret Key retrieved from [DOKU Dashboard](https://dashboard.doku.com/bo/developer/api-keys)

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>Visit <a data-mention href="/pages/FuFUFGPZcmuBWmlMhEN1#api-keys">/pages/FuFUFGPZcmuBWmlMhEN1#api-keys</a> for instructions on how to retrieve integration credentials (Client ID and Secret Key)</p></div>

   * **Expiry Time**: Expiration time in minutes
   * **Notification URL**: Payment notification URL for all payment methods
   * **QRIS Notification URL**: Payment notification URL for QRIS payment method
   * **Email Sender Address**: You can fill this column with your email address. This will later be used as info to send notifications to your customers
   * **Email Sender Name**: You can fill this column with your name. This will be used to email send notifications to your customers
   * **CC Email Adress**: You can fill this column other email adress. This will be used to email send notifications to your customers
   * **Email Notifications**: You can send an email containing a guide on how to complete the payment using specific payment methods
7. Click **Save Config**

#### Step 3: Set Up Payment Notification on DOKU Dashboard

{% hint style="warning" %}
If you skip this step, your payment status on Magento Admin Panel will not be synced with DOKU Dashboard
{% endhint %}

1. Copy the **Notification URL** from the Magento Admin Panel
2. Log in to your **DOKU Dashboard**
   * For testing transactions, visit [DOKU Sandbox](https://sandbox.doku.com/bo/login?utm_source=docs)
   * For processing real transactions, visit [DOKU Dashboard](https://dashboard.doku.com/bo/dashboard?utm_source=docs)
3. Navigate to **Settings** > **Payments Settings**, then go to each payment method settings page

<figure><img src="/files/YVsMw43nyUpXbsrEse3h" alt="" width="563"><figcaption></figcaption></figure>

4. Set up the payment notification URL for each payment method that you have activated. Visit [Webhook / Payment Notification](/get-started/manage-business/set-up-integration/webhook-payment-notification#set-up-payment-notification) for instructions

Once payment notification has been configured, you can start accepting payments with DOKU.

***

## Checkout Page Configuration

By configuring your checkout page, you will be able to:

1. **Show or hide, and sort payment methods for your customers**\
   Choose which payment methods (e.g., cards, e-wallets, and virtual accounts) tp appear on your checkout page. You can also reorder them based on your preference or customer behavior to optimize conversions.
2. **Customize the interface**\
   Adjust the look and feel of your checkout page to align with your brand. This includes modifying button colors, fonts, logos, and layout to ensure a seamless and branded customer experience.
3. **Set a default expiry time**\
   Define how long a payment session remains valid before it expires. This is useful for limiting pending transactions and encouraging quicker payments, especially for methods like virtual accounts or retail outlets.

Visit [Customize Checkout Page](/accept-payments/integration-tools/doku-checkout/customize-checkout-page) for more detailed information.

***

## Error Log

​Error log, also known as `doku_log`, helps simplify the process of identifying issues related to the payment process when using the DOKU Plugin. If any issues arise while using the plugin, you can contact our support team and provide the `doku_log` file to assist with troubleshooting. The `doku_log` file records all transaction activity by date, regardless of the payment method used.

**How to Enable and Access the doku\_log:**

1. Open the `MAGENTO_DIR` directory on your store’s web server.
2. Create a new folder named `doku_log` in your store’s directory. This enables the plugin to automatically log activity to your web server.
3. Navigate to the `doku_log` folder and open the log file corresponding to the date of the issue.
4. You can view or download the log file as needed.

If an issue occurs, please send the relevant `doku_log` file to our support team. This helps us investigate and resolve the issue more efficiently.

***

## FAQ

<details>

<summary>How to retrieve my integration credentials (Client ID and Secret Key) ?</summary>

Please refer to the guide on [Set Up Integration](/get-started/manage-business/set-up-integration#api-keys) to obtain your integration credentials.

</details>

<details>

<summary>Why is my payment status not updated on Magento Admin Panel?</summary>

Payment notification URL must be set up on DOKU Dashboard for the transaction status to be updated on Magento Admin Panel. Please be sure to not skip step number 3 in the Integration Guide section.

</details>


# SDKs and Libraries

Libraries and tools to simplify integration with DOKU

DOKU provides a full suite of SDKs and libraries to help you integrate payment capabilities quickly, securely, and reliably — across platforms and programming languages. This reduces the amount of work required to use DOKU's REST APIs. Whether you're building a mobile app, an online store, or a back-office finance system, we offer the tools to accelerate your integration and reduce time-to-market.

Our SDKs and libraries also ensure compliance with the new Bank Indonesia (BI) regulations. These regulations, known as SNAP BI, standardize the API between Payment Service Providers (PSPs) to ensure secure and consistent payment processing. Compliance with these regulations is crucial for maintaining secure operations and meeting industry standards.

## Server-side SDKs

DOKU provides server-side SDKs designed to streamline interactions with our REST APIs, significantly reducing development effort. Below is a list of the available libraries:

| Library | Version             | GitHub Repository                                                                                                                                             |
| ------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Node.js | v18.0.0 or higher   | [https://github.com/PTNUSASATUINTIARTHA-DOKU/doku-nodejs-library&#xD;](<https://github.com/PTNUSASATUINTIARTHA-DOKU/doku-nodejs-library&#xD;&#xA;&#xD;&#xA;>) |
| Java    | Java 11 or higher   | <https://github.com/PTNUSASATUINTIARTHA-DOKU/doku-java-library>                                                                                               |
| PHP     | PHP 8 or higher     | <https://github.com/PTNUSASATUINTIARTHA-DOKU/doku-php-library>                                                                                                |
| Python  | Python 38 or higher | <https://github.com/PTNUSASATUINTIARTHA-DOKU/doku-python-library>                                                                                             |
| Golang  | Go 1.22.2 or higher | <https://github.com/PTNUSASATUINTIARTHA-DOKU/doku-golang-library>                                                                                             |

***

## Mobile SDKs

DOKU's Mobile SDKs enable seamless integration of DOKU's payment solutions into iOS and Android applications. Designed with performance and security in mind, these SDKs simplify API interactions, accelerate development, and ensure a smooth, native user experience across platforms.

* **DOKU Android SDK**

{% embed url="<https://github.com/PTNUSASATUINTIARTHA-DOKU/SDK-Android>" %}

* **DOKU iOS SDK**

{% embed url="<https://github.com/PTNUSASATUINTIARTHA-DOKU/SDK-iOS>" %}

***

## Integration Guide

For complete integration guide with SDKs and Libraries, visit [DOKU API Reference](https://developers.doku.com/developer-kit/libraries-and-sdk?utm_source=docs).


# DOKU MCP Server

DOKU Model Context Protocol capabilities and use cases

<figure><img src="/files/CLgV8Axc7SG3jll2aajE" alt="" width="302"><figcaption><p>QRIS Payment with DOKU MCP</p></figcaption></figure>

## Overview

DOKU MCP Server is a gateway that connects DOKU’s payment APIs with AI-powered applications. Built using the **Model Context Protocol (MCP)**, this server allows AI agents to communicate with DOKU to build conversational commerce, automated payment assistants, and other AI-driven experiences. Instead of manually handling API calls, developers can let their AI agents communicate with DOKU through the MCP Server in a predictable and secure way.

If your business uses AI-powered apps, chatbots, or automated workflows, DOKU MCP makes it easy for your AI agents to perform operations such as:

* Generating a payment link
* Issuing a Virtual Account number
* Generating a QRIS code
* Checking the status of a transaction
* Handling post-payment workflows

| Benefit                             | Description                                                                                                        |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| **AI-Powered Payment Automation**   | Any AI system that supports MCP can immediately discover your tools and invoke them (no per-integration adapters). |
| **Quick Setup**                     | No custom wrappers needed; tools are discoverable and ready to use, cutting integration time.                      |
| **Safer / Predictable Interaction** | The schema defines valid parameters, types, and error responses, reducing the chance an agent miscalls your API.   |

***

## Key Features

DOKU MCP allows your system (or an AI assistant you use) to create payments on demand. Whether your customer is checking out on a website, speaking to a virtual assistant, or interacting through a chat application, you can provide seamless payment options instantly.

You can choose between two payment experiences:

1. Checkout Payment ([#checkout-payment](#checkout-payment "mention"))
   * Generates a DOKU-hosted payment page or payment link
   * Displays all payment methods available for your merchant account
   * Reduces development effort because DOKU handles the UI and instructions
   * Ideal for customer-facing chatbots or quick link-based payments
2. Direct Payment ([#direct-payment](#direct-payment "mention"))
   * Creates a payment instruction for a specific method (QRIS, VA, e-Wallet, PayLater)
   * No hosted page; you provide the instructions directly to the customer
   * Gives you full control over the customer experience
   * Suitable for conversational flows (WhatsApp or mesagging apps), kiosks, and POS systems

### Checkout Payment

A **Checkout Payment** refers to creating a link or embedded payment page hosted by DOKU. Your customer sees all payment methods available on your merchant account and can choose how they want to pay.

<figure><img src="/files/6uX5LL5Xo2hvsFBTcqYN" alt=""><figcaption><p>Checkout Payment Example</p></figcaption></figure>

**What you get:**

* A checkout link you can send to your customer
* A ready-to-use payment page with all supported methods
* DOKU handles the user interface and instructions

**When to use Checkout Payment:**

* You want a simple, all-in-one payment page
* You don’t want to build your own payment UI
* Your customers are interacting through chat, AI assistants, or messaging apps
* You want to show multiple payment methods (QRIS, VA, e-Wallet, PayLater)

This is the easiest way for merchants to collect payments through MCP.

### Direct Payment

Direct Payment creates a payment instruction for **one specific payment method**. This option does not use a hosted payment page. Instead, your AI agent gives the customer the information they need to complete the payment. Direct Payment is ideal when you already know the customer’s preferred payment method or when you want full control of the payment flow.

<figure><img src="/files/9wCIbn61XHkh4v1PR3ce" alt=""><figcaption><p>Direct Payment Example</p></figcaption></figure>

**What you get:**

When you create a Direct Payment, DOKU returns the payment information needed for the customer to complete the transaction, such as:

* A Virtual Account number
* A QRIS dynamic QR code or QR string
* An e-Wallet redirect link or deeplink
* A PayLater authorization URL or instructions
* A Convenience Store payment code

**When to use Direct Payment:**

* You already know the customer’s preferred payment method
* Your product uses chat or AI-driven flows (e.g., WhatsApp/AI agents)
* You want to display the payment method directly in your interface
* You only accept one or a few specific payment methods
* You want full control of the user experience

***

## Payment Methods

DOKU MCP supports a wide range of payment methods for both Checkout Payment and Direct Payment. The table below shows which payment methods are available for type:

| Payment Method                  | Checkout Payment | Direct Payment |
| ------------------------------- | ---------------- | -------------- |
| QRIS                            | ✅                | ✅              |
| Cards                           | ✅                | ✅              |
| Virtual Account (Bank Transfer) | ✅                | ✅              |
| OVO                             | ✅                | ✅              |
| ShopeePay                       | ✅                | ✅              |
| DANA                            | ✅                | ✅              |
| LinkAja                         | ✅                | ❌              |
| i.saku                          | ✅                | ❌              |
| DOKU e-Wallet                   | ✅                | ✅              |
| Alfa Group                      | ✅                | ✅              |
| Indomaret                       | ✅                | ✅              |
| Akulaku                         | ✅                | ✅              |
| Kredivo                         | ✅                | ✅              |
| Indodana                        | ✅                | ❌              |
| Kartu Kredit Indonesia          | ✅                | ❌              |
| Direct Debit BRI                | ✅                | ❌              |
| Direct Debit CIMB               | ✅                | ❌              |
| Direct Debit Allobank           | ✅                | ❌              |
| Direct Debit Mandiri            | ✅                | ❌              |
| Jenius Pay                      | ✅                | ❌              |
| Internet Banking                | ✅                | ❌              |

***

## Get Started

Please visit our [API Reference](https://developers.doku.com/accept-payments/doku-mcp-server?utm_source=docs) to learn how to integrate with DOKU MCP Server, including authentication steps, available tool schemas, request/response formats, webhook event structures, error codes, and best practices. The API Reference also covers sandbox environments for testing, migration guidelines from traditional REST APIs, and code samples in multiple languages so your team can get started quickly.

<p align="center"><a href="https://developers.doku.com/accept-payments/doku-mcp-server?utm_source=docs" class="button primary">Get Started Now</a></p>

<p align="center">Or  request assistance from the DOKU <a href="https://forms.doku.com/agentic-payments">here</a>.</p>

***

## FAQ

<details>

<summary>Is using DOKU MCP Server free of charge?</summary>

Yes, there is no fee in using DOKU MCP.

</details>

<details>

<summary>Do I need AI to use DOKU MCP?</summary>

Not necessarily. While MCP is designed to make it easier for AI agents and assistants to interact with payments, you don’t need AI to use it. You can call MCP tools directly from your backend systems, apps, or automation scripts just like a normal API. AI simply adds another layer of flexibility for conversational or autonomous payment flows.

</details>

<details>

<summary>How do I manage permissions / quotas on who can call MCP tools?</summary>

We support role-based access control (RBAC) at the tool level. You can designate which agents / users / applications can call which MCP methods. You can also enforce rate limits, quotas, and logging per API key.

</details>

<details>

<summary>Are there tools available for refunds, voids, or transaction reversals in DOKU MCP?</summary>

Yes. DOKU MCP provides tools that support refunds, voids, and transaction cancellations. For more details, please refer to the complete list of available DOKU MCP tools [here](https://developers.doku.com/accept-payments/doku-mcp-server).

</details>

<details>

<summary>Can I migrate existing payment flows to DOKU MCP without disruption?</summary>

Yes. Because your agents / systems will detect both MCP and REST interfaces, you can phase in MCP gradually, test it, and fall back to your existing flow until full cutover.

</details>

<details>

<summary>If I don’t have a technical team, can I still use DOKU MCP?</summary>

Yes. We will guide you through the setup, from creating checkout or payment links to enabling QRIS and Virtual Account payments. We can handle the technical configuration for you and make sure everything is working smoothly. Please contact our Sales team by filling the following [form](https://www.doku.com/en-US/contact-sales?utm_source=docs) to get started.

</details>


# AI Agent Toolkit

## Overview

**DOKU AI Agent Toolkit** is an AI-assisted development plugin designed to accelerate how engineering teams build and deploy DOKU payment integrations. By embedding official DOKU skills, API schemas, and code generation routines directly into modern AI coding environments, the toolkit allows developers to implement DOKU Checkout and Direct API significantly faster and with zero payload hallucinations.

For business and product leaders, the AI Agent Toolkit drastically reduces developer onboarding friction, cuts R\&D build times from weeks to hours, and ensures strict adherence to security and cryptographic signature standards from day one.

### Supported AI Ecosystems & Plugins

DOKU AI Agent Toolkit plugs natively into the industry's leading AI coding tools and environments, ensuring your engineering team can build without switching their existing workflow:

* [Cursor](https://cursor.com/): Pre-configured Cursor rules and IDE plugins that give developers real-time autocomplete, prompt-assisted integration, and inline payload validation directly inside the editor.
* [Claude](https://claude.ai/) (Claude Code & Custom Skills): Official DOKU skill schemas and system instructions tailored for Anthropic's Claude ecosystem, enabling complex multi-file code generation and automated testing workflows.
* [Codex](https://chatgpt.com/codex/) (OpenAI / Copilot): Structured context rules and prompt templates optimized for OpenAI Codex-powered agents and code generation tools.

### Supported Integration APIs

DOKU AI Agent Toolkit supports code generation and automated wiring for DOKU's core payment acceptance solutions:

* [DOKU Checkout](/accept-payments/integration-tools/doku-checkout): Quick, single-integration payment solution that hosts a payment page with all active payment methods (Bank Transfer / Virtual Account, QRIS, Credit/Debit Cards, e-Wallet, PayLater, and Convenience Store).
* [Direct API](/accept-payments/integration-tools/direct-api): Direct system-to-system integration allowing full customization of the checkout experience on your own website, application, or platform.

***

## Benefits

<details>

<summary>Lower Engineering &#x26; Maintenance Costs</summary>

Reducing the engineering hours required to connect to DOKU Direct API or DOKU Checkout directly lowers development costs. Senior engineers spend less time writing repetitive payment boilerplate and handling edge-case debugging, allowing them to focus on your core product capabilities.

</details>

<details>

<summary>Accelerated Time-to-Market</summary>

In fast-paced markets, payment integration shouldn't be a bottleneck for product launches. By equipping your development team with the AI Agent Toolkit, new software products, e-commerce applications, or SaaS platforms can begin accepting payments in a fraction of the traditional development timeframe.

</details>

<details>

<summary>Bulletproof Security and Compliance</summary>

Payment integrations require precise cryptographic signing (Digest headers, Client Keys, Secret Keys, Idempotency keys). The AI Agent Toolkit enforces DOKU’s official security and architectural standards directly inside the developer's coding environment, preventing common security bugs and configuration mistakes before code ever reaches production.

</details>

#### Traditional API Integration vs. AI Agent Toolkit

Building payment integrations traditionally requires engineering teams to parse extensive API documentation, write manual signature algorithms, and manually map complex request payloads. The AI Agent Toolkit eliminates these operational bottlenecks.

| **Feature / Metric**        | **Traditional API Integration**                                                           | **Integration with DOKU AI Agent Toolkit**                                                 |
| --------------------------- | ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| Integration Speed           | Weeks (manual documentation reading, boilerplate coding, and trial-and-error testing).    | Minutes to Hours (prompt-driven code generation using pre-loaded DOKU skills).             |
| Authentication & Signatures | Manual implementation of HMAC-SHA256, Digest headers, and SNAP security standards.        | Automated & Accurate (the plugin generates precise signature and header logic natively).   |
| API Schema Accuracy         | High risk of human error, outdated parameter mapping, or syntax mismatches.               | Guaranteed Accuracy (uses verified, up-to-date DOKU payload schemas inside the IDE).       |
| Developer Onboarding        | Requires extensive developer training on DOKU API architecture and endpoints.             | Zero Ramp-Up (developers use natural language commands like `/doku-generate checkout`).    |
| Maintenance & Updates       | Manual code refactoring whenever payment channel schemas or security requirements update. | Seamless Updates (update the IDE plugin/skill to instantly reflect new DOKU capabilities). |

***

## Get Started

* For Development Team: Read the step-by-step installation guides in our [API Reference](https://developers.doku.com/developer-kit/ai-agent-toolkit).
* For Business Team: [Contact our Sales Team](https://www.doku.com/contact-sales?utm_source=docs) to discuss custom enterprise requirements or register for sandbox credentials.

***

## FAQ

<details>

<summary>Does DOKU charge an extra subscription or API usage fee to use the AI Agent Toolkit?</summary>

The DOKU AI Agent Toolkit is completely free to DOKU merchants. You only need your existing subscriptions or access to your preferred AI coding environment (such as Cursor, Claude Code, or VS Code AI extensions).

</details>

<details>

<summary>Does code generated by the toolkit automatically pass Bank Indonesia (SNAP) compliance and DOKU’s technical go-live review?</summary>

The toolkit enforces DOKU’s official SNAP signature algorithms, required header parameters, and payload formatting by default, which drastically reduces compliance errors. However, your team remains responsible for end-to-end integration testing, secure environment variable handling, and business logic before requesting production activation via the DOKU Merchant Portal.

</details>

<details>

<summary>We hire an external software agency to build our app. Can they use the toolkit without us giving them access to our live DOKU Dashboard?</summary>

Output-wise, absolutely. Third-party developers only need to install the public DOKU plugin/skill into their IDE. They can build and test the entire integration using DOKU’s public Sandbox credentials without ever needing administrative access to your live DOKU Dashboard.

</details>

<details>

<summary>If my developers use DOKU AI Agent Toolkit, will our DOKU API credentials or proprietary codebase be exposed to third-party LLM providers?</summary>

No. The AI Agent Toolkit supplies static rules, API schemas, and signature logic locally to your developer’s IDE. It does not store or process your secret keys. Secret keys and client IDs should always be injected via environment variables (`.env`). However, because your team is using AI IDEs (like Cursor or Windsurf), your codebase handling adheres to your organization's existing privacy agreements with those respective AI tool vendors.

</details>


# Payment Methods

All payment methods/channels supported by DOKU both online and offline

## Payment Types

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Bank Transfer (Virtual Account)</strong></td><td><a href="/pages/vYtWD5OXDJicK6XGzu93#bank-transfer-virtual-account">/pages/vYtWD5OXDJicK6XGzu93#bank-transfer-virtual-account</a></td><td><a href="/files/v5vyyyLqCFP3KYKA8Uir">/files/v5vyyyLqCFP3KYKA8Uir</a></td></tr><tr><td><strong>Cards</strong></td><td><a href="/pages/vYtWD5OXDJicK6XGzu93#cards">/pages/vYtWD5OXDJicK6XGzu93#cards</a></td><td><a href="/files/bHxc3oADDM1M4HpsAvJJ">/files/bHxc3oADDM1M4HpsAvJJ</a></td></tr><tr><td><strong>e-Wallet</strong></td><td><a href="/pages/vYtWD5OXDJicK6XGzu93#e-wallet">/pages/vYtWD5OXDJicK6XGzu93#e-wallet</a></td><td><a href="/files/vX4GT7OetNDd6MbacT5z">/files/vX4GT7OetNDd6MbacT5z</a></td></tr><tr><td><strong>QR Payment</strong></td><td><a href="/pages/vYtWD5OXDJicK6XGzu93#qr-payment">/pages/vYtWD5OXDJicK6XGzu93#qr-payment</a></td><td><a href="/files/3J3PF33tkrHywfd1bHMU">/files/3J3PF33tkrHywfd1bHMU</a></td></tr><tr><td><strong>Kartu Kredit Indonesia</strong></td><td><a href="/pages/vYtWD5OXDJicK6XGzu93#kartu-kredit-indonesia">/pages/vYtWD5OXDJicK6XGzu93#kartu-kredit-indonesia</a></td><td><a href="/files/kRxrEMxk2ituqGL5fGY2">/files/kRxrEMxk2ituqGL5fGY2</a></td></tr><tr><td><strong>Convenience Store</strong></td><td><a href="/pages/vYtWD5OXDJicK6XGzu93#convenience-store">/pages/vYtWD5OXDJicK6XGzu93#convenience-store</a></td><td><a href="/files/uvvheBMKlSWwO3IQjV40">/files/uvvheBMKlSWwO3IQjV40</a></td></tr><tr><td><strong>PayLater</strong></td><td><a href="/pages/vYtWD5OXDJicK6XGzu93#paylater">/pages/vYtWD5OXDJicK6XGzu93#paylater</a></td><td><a href="/files/2NAuFHQXFzGaLsxpsnsR">/files/2NAuFHQXFzGaLsxpsnsR</a></td></tr><tr><td><strong>Direct Debit</strong></td><td><a href="/pages/vYtWD5OXDJicK6XGzu93#direct-debit">/pages/vYtWD5OXDJicK6XGzu93#direct-debit</a></td><td><a href="/files/MnyhxobsZMQRcy1MZ60o">/files/MnyhxobsZMQRcy1MZ60o</a></td></tr><tr><td><strong>Digital Banking</strong></td><td><a href="/pages/vYtWD5OXDJicK6XGzu93#digital-banking">/pages/vYtWD5OXDJicK6XGzu93#digital-banking</a></td><td><a href="/files/meItjnpv75FjZYHhbw0F">/files/meItjnpv75FjZYHhbw0F</a></td></tr><tr><td><strong>Internet Banking</strong></td><td><a href="/pages/vYtWD5OXDJicK6XGzu93#internet-banking">/pages/vYtWD5OXDJicK6XGzu93#internet-banking</a></td><td><a href="/files/YsXiwk2xFl77GPo4UVJA">/files/YsXiwk2xFl77GPo4UVJA</a></td></tr></tbody></table>

### Bank Transfer (Virtual Account)

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only&#x20;
{% endhint %}

| Payment Method           |
| ------------------------ |
| Virtual Account BCA      |
| Virtual Account Mandiri  |
| Virtual Account BRI      |
| Virtual Account BNI      |
| Virtual Account BSI      |
| Virtual Account BNC      |
| Virtual Account BTN      |
| Virtual Account BSS      |
| Virtual Account CIMB     |
| Virtual Account Permata  |
| Virtual Account Danamon  |
| Virtual Account Maybank  |
| Virtual Account BPD Bali |
| Virtual Account BJB      |
| Virtual Account DOKU     |

> Note: Virtual Account DOKU is used to facilitate interbank transfers, which means that this virtual account can be paid using other banks that are not listed above.

### Cards

| Payment Method          |
| ----------------------- |
| Cards                   |
| Credit Card Installment |

> Note: Card payments with DOKU include credit cards and local-issued debit cards. Networks range from Visa, Mastercard, JCB, and American Express (AMEX). AMEX is supported only with certain bank acquirers.

### e-Wallet

| Payment Method | Country                |
| -------------- | ---------------------- |
| DOKU e-Wallet  | Indonesia              |
| OVO            | Indonesia              |
| ShopeePay      | Indonesia and Malaysia |
| DANA           | Indonesia              |
| LinkAja        | Indonesia              |
| i.saku         | Indonesia              |
| Touch 'n Go    | Malaysia               |
| GrabPay        | Malaysia               |
| Boost          | Malaysia               |
| ShopBack       | Malaysia               |

### QR Payment

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only&#x20;
{% endhint %}

| Payment Method |
| -------------- |
| QRIS           |

### Kartu Kredit Indonesia

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only&#x20;
{% endhint %}

| Payment Method               |
| ---------------------------- |
| Kartu Kredit Indonesia (GPN) |

### PayLater

| Payment Method   | Country                |
| ---------------- | ---------------------- |
| Akulaku          | Indonesia              |
| Kredivo          | Indonesia              |
| Indodana         | Indonesia              |
| SPayLater        | Indonesia and Malaysia |
| PayLater by Grab | Malaysia               |
| Atome            | Malaysia               |

### Convenience Store

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only&#x20;
{% endhint %}

| Payment Method                                       |
| ---------------------------------------------------- |
| Alfa Group (Alfamart, Alfamidi, Dan+Dan, and Lawson) |
| Indomaret                                            |

### Direct Debit

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only&#x20;
{% endhint %}

| Payment Method        |
| --------------------- |
| Direct Debit BRI      |
| Direct Debit CIMB     |
| Direct Debit Allobank |
| Direct Debit Mandiri  |

### Digital Banking

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only&#x20;
{% endhint %}

| Payment Method |
| -------------- |
| Jenius Pay     |

### Internet Banking

| Payment Method                                                                                                                                                                                                                                                                                                                                                                            | Country   |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- |
| BRImo e-Payment                                                                                                                                                                                                                                                                                                                                                                           | Indonesia |
| Internet Banking Muamalat                                                                                                                                                                                                                                                                                                                                                                 | Indonesia |
| OCTO Clicks                                                                                                                                                                                                                                                                                                                                                                               | Indonesia |
| Danamon Online Banking                                                                                                                                                                                                                                                                                                                                                                    | Indonesia |
| PermataNet                                                                                                                                                                                                                                                                                                                                                                                | Indonesia |
| <p>FPX Online Banking</p><ul><li>Maybank</li><li>Hong Leong Bank</li><li>OCBC Bank</li><li>Bank Islam</li><li>CIMB Bank</li><li>BSN (Bank Simpanan Nasional)</li><li>HSBC</li><li>AmBank</li><li>Public Bank</li><li>Bank Rakyat</li><li>Standard Chartered</li><li>RHB</li><li>Affin Bank</li><li>UOB</li><li>Bank Muamalat</li><li>Alliance Bank</li><li>Kuwait Finance House</li></ul> | Malaysia  |

***

## Pricing

DOKU only charges fee based on successful transactions. The fees will be deducted from the settlement amount.

**Don't worry!** There are no setup fees, monthly subscription fees nor registration fees.[ ](https://www.doku.com/en/pricing)

Click [here](https://www.doku.com/en-US/pricing?utm_source=docs) to see the full price list for each payment method.

***

## Activation

For payment method activation guide and inquiries, please refer to [Manage Payment Methods](/get-started/manage-business/manage-payment-methods).

***

## FAQ

<details>

<summary>Can a BCA Virtual Account be paid from other banks?</summary>

Yes. In Indonesia, Virtual Accounts can generally be paid from any bank, not just the issuing bank. This means a BCA Virtual Account can be paid via ATM, mobile banking, or internet banking from other banks that support interbank transfers. This is a standard feature of the Virtual Account system in Indonesia.

</details>

<details>

<summary>How does the PayLater payment method work? Will I receive the full amount in settlement?</summary>

When a customer pays using PayLater payment methods like Akulaku or Kredivo, the merchant receives the full transaction amount upfront—regardless of the customer's installment plan. The PayLater payment channel provider handles all repayments directly with the customer.

</details>

<details>

<summary>Does ShopeePay payment method include SPayLater?</summary>

Yes, this means activating ShopeePay will also enable Shopee Paylater (SPayLater) payment method.

</details>


# 🇮🇩 Requirements and Limitations

Payment method activation requirements and transaction limits in Indonesia

This page outlines the technical, business, and regulatory requirements, as well as the transaction limitations, for each supported payment method in Indonesia.

## Account Requirements

{% hint style="info" %}
[Learn more](/get-started/activate-business#business-types) about the differences between Personal, Corporate, and International.
{% endhint %}

### Bank Transfer (Virtual Account)

<table><thead><tr><th width="255">Payment Method</th><th>Personal<select><option value="515307bbb75347cdb24605399d586126" label="✅ Allowed" color="blue"></option><option value="05926fa3097f4433a87945ef0c36a312" label="🚫 Not Allowed" color="blue"></option></select></th><th>Corporate<select><option value="bc34bc3e1c294309932bb802b1bd4a6f" label="❌ Not allowed" color="blue"></option><option value="04db83e1cf1948298d2a4766a4e9cb88" label="✅ Allowed" color="blue"></option></select></th><th>International<select><option value="395e07a10aab44e8a373a01ae6748ceb" label="✅ Allowed" color="blue"></option><option value="ccd56847bcbd48a585c468277f2434a4" label="🚫 Not Allowed" color="blue"></option></select></th><th data-hidden>Auto-active?<select><option value="0557c04512a54ff7bcc4d1b4da0333ab" label="✅" color="blue"></option><option value="556b3d72db9d48398394494690811d1d" label="❌" color="blue"></option></select></th><th data-hidden>Required Document</th><th data-hidden>Personal<select><option value="59f2ad86ded54486be294617a0d33153" label="❌" color="blue"></option><option value="a9f6ee5a850441f1965a8c5abada52b3" label="✅" color="blue"></option></select></th><th data-hidden>Corporate<select></select></th><th data-hidden>International<select></select></th></tr></thead><tbody><tr><td>Virtual Account BCA</td><td><span data-option="05926fa3097f4433a87945ef0c36a312">🚫 Not Allowed</span></td><td><span data-option="04db83e1cf1948298d2a4766a4e9cb88">✅ Allowed</span></td><td><span data-option="ccd56847bcbd48a585c468277f2434a4">🚫 Not Allowed</span></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Virtual Account Mandiri</td><td><span data-option="515307bbb75347cdb24605399d586126">✅ Allowed</span></td><td><span data-option="04db83e1cf1948298d2a4766a4e9cb88">✅ Allowed</span></td><td><span data-option="ccd56847bcbd48a585c468277f2434a4">🚫 Not Allowed</span></td><td><span data-option="0557c04512a54ff7bcc4d1b4da0333ab">✅</span></td><td>-</td><td><span data-option="a9f6ee5a850441f1965a8c5abada52b3">✅</span></td><td></td><td></td></tr><tr><td>Virtual Account BRI</td><td><span data-option="515307bbb75347cdb24605399d586126">✅ Allowed</span></td><td><span data-option="04db83e1cf1948298d2a4766a4e9cb88">✅ Allowed</span></td><td><span data-option="395e07a10aab44e8a373a01ae6748ceb">✅ Allowed</span></td><td><span data-option="0557c04512a54ff7bcc4d1b4da0333ab">✅</span></td><td>-</td><td><span data-option="a9f6ee5a850441f1965a8c5abada52b3">✅</span></td><td></td><td></td></tr><tr><td>Virtual Account BNI</td><td><span data-option="515307bbb75347cdb24605399d586126">✅ Allowed</span></td><td><span data-option="04db83e1cf1948298d2a4766a4e9cb88">✅ Allowed</span></td><td><span data-option="395e07a10aab44e8a373a01ae6748ceb">✅ Allowed</span></td><td><span data-option="0557c04512a54ff7bcc4d1b4da0333ab">✅</span></td><td>-</td><td><span data-option="a9f6ee5a850441f1965a8c5abada52b3">✅</span></td><td></td><td></td></tr><tr><td>Virtual Account BSI</td><td><span data-option="515307bbb75347cdb24605399d586126">✅ Allowed</span></td><td><span data-option="04db83e1cf1948298d2a4766a4e9cb88">✅ Allowed</span></td><td><span data-option="395e07a10aab44e8a373a01ae6748ceb">✅ Allowed</span></td><td><span data-option="0557c04512a54ff7bcc4d1b4da0333ab">✅</span></td><td>-</td><td><span data-option="a9f6ee5a850441f1965a8c5abada52b3">✅</span></td><td></td><td></td></tr><tr><td>Virtual Account BNC</td><td><span data-option="515307bbb75347cdb24605399d586126">✅ Allowed</span></td><td><span data-option="04db83e1cf1948298d2a4766a4e9cb88">✅ Allowed</span></td><td><span data-option="395e07a10aab44e8a373a01ae6748ceb">✅ Allowed</span></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Virtual Account BTN</td><td><span data-option="515307bbb75347cdb24605399d586126">✅ Allowed</span></td><td><span data-option="04db83e1cf1948298d2a4766a4e9cb88">✅ Allowed</span></td><td><span data-option="395e07a10aab44e8a373a01ae6748ceb">✅ Allowed</span></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Virtual Account BSS</td><td><span data-option="515307bbb75347cdb24605399d586126">✅ Allowed</span></td><td><span data-option="04db83e1cf1948298d2a4766a4e9cb88">✅ Allowed</span></td><td><span data-option="395e07a10aab44e8a373a01ae6748ceb">✅ Allowed</span></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Virtual Account CIMB</td><td><span data-option="515307bbb75347cdb24605399d586126">✅ Allowed</span></td><td><span data-option="04db83e1cf1948298d2a4766a4e9cb88">✅ Allowed</span></td><td><span data-option="395e07a10aab44e8a373a01ae6748ceb">✅ Allowed</span></td><td><span data-option="0557c04512a54ff7bcc4d1b4da0333ab">✅</span></td><td>-</td><td><span data-option="a9f6ee5a850441f1965a8c5abada52b3">✅</span></td><td></td><td></td></tr><tr><td>Virtual Account Permata</td><td><span data-option="515307bbb75347cdb24605399d586126">✅ Allowed</span></td><td><span data-option="04db83e1cf1948298d2a4766a4e9cb88">✅ Allowed</span></td><td><span data-option="395e07a10aab44e8a373a01ae6748ceb">✅ Allowed</span></td><td><span data-option="0557c04512a54ff7bcc4d1b4da0333ab">✅</span></td><td>-</td><td><span data-option="a9f6ee5a850441f1965a8c5abada52b3">✅</span></td><td></td><td></td></tr><tr><td>Virtual Account Danamon</td><td><span data-option="515307bbb75347cdb24605399d586126">✅ Allowed</span></td><td><span data-option="04db83e1cf1948298d2a4766a4e9cb88">✅ Allowed</span></td><td><span data-option="395e07a10aab44e8a373a01ae6748ceb">✅ Allowed</span></td><td></td><td>-</td><td><span data-option="a9f6ee5a850441f1965a8c5abada52b3">✅</span></td><td></td><td></td></tr><tr><td>Virtual Account Maybank</td><td><span data-option="515307bbb75347cdb24605399d586126">✅ Allowed</span></td><td><span data-option="04db83e1cf1948298d2a4766a4e9cb88">✅ Allowed</span></td><td><span data-option="395e07a10aab44e8a373a01ae6748ceb">✅ Allowed</span></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Virtual Account BPD Bali</td><td><span data-option="515307bbb75347cdb24605399d586126">✅ Allowed</span></td><td><span data-option="04db83e1cf1948298d2a4766a4e9cb88">✅ Allowed</span></td><td><span data-option="395e07a10aab44e8a373a01ae6748ceb">✅ Allowed</span></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Virtual Account BJB</td><td><span data-option="515307bbb75347cdb24605399d586126">✅ Allowed</span></td><td><span data-option="04db83e1cf1948298d2a4766a4e9cb88">✅ Allowed</span></td><td><span data-option="395e07a10aab44e8a373a01ae6748ceb">✅ Allowed</span></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Virtual Account DOKU</td><td><span data-option="515307bbb75347cdb24605399d586126">✅ Allowed</span></td><td><span data-option="04db83e1cf1948298d2a4766a4e9cb88">✅ Allowed</span></td><td><span data-option="395e07a10aab44e8a373a01ae6748ceb">✅ Allowed</span></td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>

{% hint style="info" %}
Virtual Account DOKU is used to facilitate interbank transfers, which means that this virtual account can be paid using other banks that are not listed above.
{% endhint %}

### Cards

<table><thead><tr><th>Payment Method</th><th>Personal<select><option value="hXKsFKwgQABp" label="✅ Allowed" color="blue"></option><option value="c87MScc1C6rz" label="🚫 Not Allowed" color="blue"></option></select></th><th>Corporate<select><option value="IPjkGZgHZDuG" label="🚫 Not Allowed" color="blue"></option><option value="GIugnJDARjDB" label="✅ Allowed" color="blue"></option></select></th><th>International<select><option value="eFsCSt1jcxI8" label="✅ Allowed" color="blue"></option><option value="Rn1rft6j5dsz" label="🚫 Not Allowed" color="blue"></option></select></th></tr></thead><tbody><tr><td>Cards</td><td><span data-option="hXKsFKwgQABp">✅ Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr><tr><td>Credit Card Installment</td><td><span data-option="c87MScc1C6rz">🚫 Not Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr></tbody></table>

{% hint style="info" %}
Card payments with DOKU include credit cards and local-issued debit cards. Networks range from Visa, Mastercard, JCB, and American Express (AMEX). AMEX is supported only with certain bank acquirers.
{% endhint %}

### e-Wallet

<table><thead><tr><th>Payment Method</th><th>Personal<select><option value="hXKsFKwgQABp" label="✅ Allowed" color="blue"></option><option value="c87MScc1C6rz" label="🚫 Not Allowed" color="blue"></option></select></th><th>Corporate<select><option value="IPjkGZgHZDuG" label="🚫 Not Allowed" color="blue"></option><option value="GIugnJDARjDB" label="✅ Allowed" color="blue"></option></select></th><th>International<select><option value="eFsCSt1jcxI8" label="✅ Allowed" color="blue"></option><option value="Rn1rft6j5dsz" label="🚫 Not Allowed" color="blue"></option></select></th></tr></thead><tbody><tr><td>DOKU e-Wallet</td><td><span data-option="hXKsFKwgQABp">✅ Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr><tr><td>OVO</td><td><span data-option="hXKsFKwgQABp">✅ Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr><tr><td>ShopeePay</td><td><span data-option="hXKsFKwgQABp">✅ Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr><tr><td>DANA</td><td><span data-option="hXKsFKwgQABp">✅ Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr><tr><td>LinkAja</td><td><span data-option="hXKsFKwgQABp">✅ Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr><tr><td>i.saku</td><td><span data-option="hXKsFKwgQABp">✅ Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr></tbody></table>

### QR Payment

<table><thead><tr><th>Payment Method</th><th>Personal<select><option value="hXKsFKwgQABp" label="✅ Allowed" color="blue"></option><option value="c87MScc1C6rz" label="🚫 Not Allowed" color="blue"></option></select></th><th>Corporate<select><option value="IPjkGZgHZDuG" label="🚫 Not Allowed" color="blue"></option><option value="GIugnJDARjDB" label="✅ Allowed" color="blue"></option></select></th><th>International<select><option value="eFsCSt1jcxI8" label="✅ Allowed" color="blue"></option><option value="Rn1rft6j5dsz" label="🚫 Not Allowed" color="blue"></option></select></th></tr></thead><tbody><tr><td>QRIS</td><td><span data-option="hXKsFKwgQABp">✅ Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="Rn1rft6j5dsz">🚫 Not Allowed</span></td></tr></tbody></table>

### Kartu Kredit Indonesia

<table><thead><tr><th>Payment Method</th><th>Personal<select><option value="hXKsFKwgQABp" label="✅ Allowed" color="blue"></option><option value="c87MScc1C6rz" label="🚫 Not Allowed" color="blue"></option></select></th><th>Corporate<select><option value="IPjkGZgHZDuG" label="🚫 Not Allowed" color="blue"></option><option value="GIugnJDARjDB" label="✅ Allowed" color="blue"></option></select></th><th>International<select><option value="eFsCSt1jcxI8" label="✅ Allowed" color="blue"></option><option value="Rn1rft6j5dsz" label="🚫 Not Allowed" color="blue"></option></select></th></tr></thead><tbody><tr><td>Kartu Kredit Indonesia (GPN)</td><td><span data-option="hXKsFKwgQABp">✅ Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="Rn1rft6j5dsz">🚫 Not Allowed</span></td></tr></tbody></table>

### PayLater

<table><thead><tr><th width="240">Payment Method</th><th>Personal<select><option value="hXKsFKwgQABp" label="✅ Allowed" color="blue"></option><option value="c87MScc1C6rz" label="🚫 Not Allowed" color="blue"></option></select></th><th>Corporate<select><option value="IPjkGZgHZDuG" label="🚫 Not Allowed" color="blue"></option><option value="GIugnJDARjDB" label="✅ Allowed" color="blue"></option></select></th><th>International<select><option value="eFsCSt1jcxI8" label="✅ Allowed" color="blue"></option><option value="Rn1rft6j5dsz" label="🚫 Not Allowed" color="blue"></option></select></th></tr></thead><tbody><tr><td>Akulaku</td><td><span data-option="hXKsFKwgQABp">✅ Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr><tr><td>Kredivo</td><td><span data-option="c87MScc1C6rz">🚫 Not Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr><tr><td>Indodana</td><td><span data-option="c87MScc1C6rz">🚫 Not Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr></tbody></table>

### Convenience Store

<table><thead><tr><th width="240">Payment Method</th><th>Personal<select><option value="hXKsFKwgQABp" label="✅ Allowed" color="blue"></option><option value="c87MScc1C6rz" label="🚫 Not Allowed" color="blue"></option></select></th><th>Corporate<select><option value="IPjkGZgHZDuG" label="🚫 Not Allowed" color="blue"></option><option value="GIugnJDARjDB" label="✅ Allowed" color="blue"></option></select></th><th>International<select><option value="eFsCSt1jcxI8" label="✅ Allowed" color="blue"></option><option value="Rn1rft6j5dsz" label="🚫 Not Allowed" color="blue"></option></select></th></tr></thead><tbody><tr><td>Alfa Group</td><td><span data-option="hXKsFKwgQABp">✅ Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr><tr><td>Indomaret</td><td><span data-option="hXKsFKwgQABp">✅ Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr></tbody></table>

{% hint style="info" %}
Alfa Group includes Alfamart, Alfamidi, DanDan, and Lawson.
{% endhint %}

### Direct Debit

<table><thead><tr><th>Payment Method</th><th>Personal<select><option value="hXKsFKwgQABp" label="✅ Allowed" color="blue"></option><option value="c87MScc1C6rz" label="🚫 Not Allowed" color="blue"></option></select></th><th>Corporate<select><option value="IPjkGZgHZDuG" label="🚫 Not Allowed" color="blue"></option><option value="GIugnJDARjDB" label="✅ Allowed" color="blue"></option></select></th><th>International<select><option value="eFsCSt1jcxI8" label="✅ Allowed" color="blue"></option><option value="Rn1rft6j5dsz" label="🚫 Not Allowed" color="blue"></option></select></th></tr></thead><tbody><tr><td>Direct Debit BRI</td><td><span data-option="c87MScc1C6rz">🚫 Not Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="Rn1rft6j5dsz">🚫 Not Allowed</span></td></tr><tr><td>Direct Debit CIMB</td><td><span data-option="c87MScc1C6rz">🚫 Not Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="Rn1rft6j5dsz">🚫 Not Allowed</span></td></tr><tr><td>Direct Debit Allobank</td><td><span data-option="c87MScc1C6rz">🚫 Not Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="Rn1rft6j5dsz">🚫 Not Allowed</span></td></tr><tr><td>Direct Debit Mandiri</td><td><span data-option="c87MScc1C6rz">🚫 Not Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="Rn1rft6j5dsz">🚫 Not Allowed</span></td></tr></tbody></table>

### Digital Banking

<table><thead><tr><th>Payment Method</th><th>Personal<select><option value="hXKsFKwgQABp" label="✅ Allowed" color="blue"></option><option value="c87MScc1C6rz" label="🚫 Not Allowed" color="blue"></option></select></th><th>Corporate<select><option value="IPjkGZgHZDuG" label="🚫 Not Allowed" color="blue"></option><option value="GIugnJDARjDB" label="✅ Allowed" color="blue"></option></select></th><th>International<select><option value="eFsCSt1jcxI8" label="✅ Allowed" color="blue"></option><option value="Rn1rft6j5dsz" label="🚫 Not Allowed" color="blue"></option></select></th></tr></thead><tbody><tr><td>Jenius Pay</td><td><span data-option="c87MScc1C6rz">🚫 Not Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr></tbody></table>

### Internet Banking

<table><thead><tr><th>Payment Method</th><th>Personal<select><option value="hXKsFKwgQABp" label="✅ Allowed" color="blue"></option><option value="c87MScc1C6rz" label="🚫 Not Allowed" color="blue"></option></select></th><th>Corporate<select><option value="IPjkGZgHZDuG" label="🚫 Not Allowed" color="blue"></option><option value="GIugnJDARjDB" label="✅ Allowed" color="blue"></option></select></th><th>International<select><option value="eFsCSt1jcxI8" label="✅ Allowed" color="blue"></option><option value="Rn1rft6j5dsz" label="🚫 Not Allowed" color="blue"></option></select></th></tr></thead><tbody><tr><td>BRImo e-Payment</td><td><span data-option="c87MScc1C6rz">🚫 Not Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr><tr><td>Internet Banking Muamalat</td><td><span data-option="hXKsFKwgQABp">✅ Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr><tr><td>OCTO Clicks</td><td><span data-option="hXKsFKwgQABp">✅ Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr><tr><td>Danamon Online Banking</td><td><span data-option="c87MScc1C6rz">🚫 Not Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr><tr><td>PermataNet</td><td><span data-option="c87MScc1C6rz">🚫 Not Allowed</span></td><td><span data-option="GIugnJDARjDB">✅ Allowed</span></td><td><span data-option="eFsCSt1jcxI8">✅ Allowed</span></td></tr></tbody></table>

***

## Limitations

### Bank Transfer (Virtual Account)

<table><thead><tr><th width="190">Payment Method</th><th width="161">Requirements</th><th width="380">Minimum and Maximum Amount</th><th data-hidden>Auto-active?<select><option value="0557c04512a54ff7bcc4d1b4da0333ab" label="✅" color="blue"></option><option value="556b3d72db9d48398394494690811d1d" label="❌" color="blue"></option></select></th><th data-hidden>Required Document</th><th data-hidden>Personal<select><option value="59f2ad86ded54486be294617a0d33153" label="❌" color="blue"></option><option value="a9f6ee5a850441f1965a8c5abada52b3" label="✅" color="blue"></option></select></th><th data-hidden>Corporate<select></select></th><th data-hidden>International<select></select></th></tr></thead><tbody><tr><td>Virtual Account BCA</td><td><ul><li>Service agreement with DOKU</li><li>BCA bank account</li></ul></td><td><p>Min: IDR 10,000</p><p></p><p>Max: IDR 50,000,000, but limit can be increased upon bank's approval</p></td><td><span data-option="0557c04512a54ff7bcc4d1b4da0333ab">✅</span></td><td>-</td><td><span data-option="a9f6ee5a850441f1965a8c5abada52b3">✅</span></td><td></td><td></td></tr><tr><td>Virtual Account Mandiri</td><td><p></p><ul><li>Service agreement with DOKU</li><li>Mandiri bank account</li></ul></td><td>Min: IDR 1<br><br>Max: IDR 300,000,000 for same bank, IDR 500,000,000 for interbank</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Virtual Account BRI</td><td>No specific requirements</td><td>Min: IDR 1<br><br>Max: IDR 50,000,000,000 for same bank, IDR 500,000,000 for interbank</td><td><span data-option="0557c04512a54ff7bcc4d1b4da0333ab">✅</span></td><td>-</td><td><span data-option="a9f6ee5a850441f1965a8c5abada52b3">✅</span></td><td></td><td></td></tr><tr><td>Virtual Account BNI</td><td>No specific requirements</td><td>Min: IDR 1<br><br>Max: IDR 50,000,000</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Virtual Account Permata</td><td>No specific requirements</td><td>Min: IDR 1<br><br>Max: IDR 9,999,999,999</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Virtual Account CIMB</td><td>No specific requirements</td><td><p>Min: IDR 10,000</p><p></p><p>Max: IDR 50,000,000,000</p></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Virtual Account BSI</td><td>No specific requirements</td><td>Min: IDR 1<br><br>Max: IDR 100,000,000</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Virtual Account Danamon</td><td>No specific requirements</td><td>Min: IDR 1<br><br>Max: IDR 2,000,000,000 for same bank, IDR 200,000,000 for interbank</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Virtual Account DOKU</td><td>No specific requirements</td><td>Min: IDR 1<br><br>Max: IDR 250,000,000</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Virtual Account Maybank </td><td>No specific requirements</td><td>Min: IDR 1<br><br>Max: IDR 10,000,000,000 for same bank, IDR 200,000,000 for interbank</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Virtual Account Sinarmas </td><td>No specific requirements</td><td>Min: IDR 1<br><br>Max: IDR 5,000,000,000 for same bank, IDR 50,000,000 for interbank</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Virtual Account BTN</td><td>No specific requirements</td><td>Min: IDR 1<br><br>Max: IDR 9,999,999,999</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Virtual Account of Other Banks</td><td>No specific requirements</td><td><p>Min: IDR 10,000<br></p><p>Max: Depends on bank account balance and account type</p></td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>

### Cards

<table><thead><tr><th width="192">Payment Method</th><th width="162">Requirements</th><th width="380">Minimum and Maximum Amount</th></tr></thead><tbody><tr><td>Cards</td><td>No specific requirements</td><td><p>Min: IDR 1, but some issuers may only accept IDR 10,000</p><p><br>Max: Individual credit card limit</p></td></tr><tr><td>CC Installment</td><td>No specific requirements</td><td><p>Min: IDR 1, but some issuers may only accept IDR 10,000</p><p><br>Max: Individual credit card limit</p></td></tr></tbody></table>

### e-Wallet

<table><thead><tr><th>Payment Method</th><th width="159">Requirements</th><th width="381">Minimum and Maximum Amount</th></tr></thead><tbody><tr><td>DOKU e-Wallet</td><td>No specific requirements</td><td>Min: IDR 10,000</td></tr><tr><td>OVO</td><td>No specific requirements</td><td><p>Min: IDR 10,000</p><p></p><p>Max: IDR 2,000,000 per transaction for non KYC users(club account), IDR 20,000,000 per transaction for KYC users (premier account)</p></td></tr><tr><td>ShopeePay</td><td>No specific requirements</td><td><p>Min: IDR 10,000</p><p></p><p>Max: IDR 2,000,000 per transaction for non KYC users(club account), IDR 20,000,000 per transaction for KYC users (premier account)</p></td></tr><tr><td>DANA</td><td>No specific requirements</td><td>Min: IDR 10,000</td></tr><tr><td>LinkAja</td><td>No specific requirements</td><td>Min: IDR 10,000</td></tr></tbody></table>

### QR Payment

<table><thead><tr><th width="196">Payment Method</th><th width="161">Requirements</th><th>Minimum and Maximum Amount</th></tr></thead><tbody><tr><td>QRIS</td><td>Owner's identity card (KTP) or <em>Nomor Pokok Wajib Pajak</em> (NPWP)</td><td><p>Min: IDR 1</p><p></p><p>Max: IDR 10,000,000 per transaction </p></td></tr></tbody></table>

### Kartu Kredit Indonesia

<table><thead><tr><th width="192">Payment Method</th><th width="162">Requirements</th><th width="380">Minimum and Maximum Amount</th></tr></thead><tbody><tr><td>Kartu Kredit Indonesia </td><td>Owner's identity card (KTP) or <em>Nomor Pokok Wajib Pajak</em> (NPWP)</td><td><p>Min: IDR 1, but some issuers may only accept IDR 10,000</p><p><br>Max: Individual credit card limit</p></td></tr></tbody></table>

### PayLater

<table><thead><tr><th width="196">Payment Method</th><th width="163">Requirements</th><th>Minimum and Maximum Amount</th></tr></thead><tbody><tr><td>Akulaku</td><td>No specific requirements</td><td>Depends on customer's credit line</td></tr><tr><td>Kredivo</td><td>No specific requirements</td><td><p>Pay in 30 days:</p><ul><li>No minimum transaction</li><li>Max purchase: IDR 3,000,000</li><li>0% interest</li></ul><p>Pay 3, 6, 12 months</p><ul><li>Minimum amount of IDR 1,000,000</li><li>Max purchase: IDR 30,000,000</li><li>2.95% monthly interest</li></ul></td></tr><tr><td>Indodana</td><td>No specific requirements</td><td>Min: IDR 10,000</td></tr></tbody></table>

### Convenience Store

<table><thead><tr><th width="197">Payment Method</th><th width="161">Requirements</th><th>Minimum and Maximum Amount</th></tr></thead><tbody><tr><td>Alfa Group</td><td>No specific requirements</td><td>Maximum of IDR 5,000,000 per transaction with debit and IDR 2,500,000 per transaction with cash</td></tr><tr><td>Indomaret</td><td>No specific requirements</td><td>Maximum of IDR 5,000,000 per transaction with debit or cash</td></tr></tbody></table>

***

### Direct Debit

<table><thead><tr><th width="198">Payment Method</th><th width="166">Requirements</th><th width="408.99993896484375">Minimum and Maximum Amount</th></tr></thead><tbody><tr><td>Direct Debit BRI</td><td>Service agreement with DOKU</td><td><p>Min: IDR 10,000</p><p></p><p>Max: IDR 20,000,000 per day</p></td></tr><tr><td>Direct Debit CIMB</td><td>Service agreement with DOKU</td><td><p>Min: IDR 10,000</p><p></p><p>Max: Depends on account type </p><ul><li>Classic IDR 10,000,000/day </li><li>Black IDR 20,000,000/day </li><li>Premium IDR 50,000,000/day</li></ul></td></tr><tr><td>Direct Debit Allobank</td><td>Service agreement with DOKU</td><td>Min: IDR 10,000</td></tr><tr><td>Direct Debit Mandiri</td><td>Service agreement with DOKU</td><td>Min: IDR 10,000</td></tr></tbody></table>

### Digital Banking

<table><thead><tr><th width="200">Payment Method</th><th width="167">Requirements</th><th width="379.99993896484375">Minimum and Maximum Amount</th></tr></thead><tbody><tr><td>Jenius Pay</td><td>No specific requirements</td><td>Min: IDR 10,000</td></tr></tbody></table>

### Internet Banking

<table><thead><tr><th width="204">Payment Method</th><th width="164">Requirements</th><th width="380">Minimum and Maximum Amount</th></tr></thead><tbody><tr><td>BRImo e-Payment</td><td>No specific requirements</td><td>Min: IDR 10,000</td></tr><tr><td>Internet Banking Muamalat</td><td>No specific requirements</td><td>Min: IDR 10,000</td></tr><tr><td>OCTO Clicks</td><td>No specific requirements</td><td>Min: IDR 10,000</td></tr><tr><td>Danamon Online Banking</td><td>No specific requirements</td><td>Min: IDR 10,000</td></tr><tr><td>PermataNet</td><td>No specific requirements</td><td>Min: IDR 10,000</td></tr></tbody></table>

{% hint style="info" %}
If you would like to have a service agreement with DOKU, please contact our Sales team by filling the following [form](https://www.doku.com/en-US/contact-sales?utm_source=docs)
{% endhint %}


# 🇲🇾 Requirements and Limitations

Payment method activation requirements and transaction limits in Malaysia

This page outlines the technical, business, and regulatory requirements, as well as the transaction limitations, for each supported payment method in Malaysia.

## Limitations

### Cards

<table><thead><tr><th width="192">Payment Method</th><th width="162">Requirements</th><th width="380">Minimum and Maximum Amount</th></tr></thead><tbody><tr><td>Cards</td><td>No specific requirements</td><td><p>Min: MYR 2</p><p><br>Max: Individual credit card limit</p></td></tr><tr><td>CC Installment</td><td>No specific requirements</td><td><p>Min: MYR 2</p><p><br>Max: Individual credit card limit</p></td></tr></tbody></table>

### Internet Banking

<table><thead><tr><th width="204">Payment Method</th><th width="164">Requirements</th><th width="380">Minimum and Maximum Amount</th></tr></thead><tbody><tr><td>FPX</td><td>No specific requirements</td><td>Min: Min: MYR 2</td></tr></tbody></table>

### e-Wallet

<table><thead><tr><th>Payment Method</th><th width="159">Requirements</th><th width="381">Minimum and Maximum Amount</th></tr></thead><tbody><tr><td>ShopeePay</td><td>No specific requirements</td><td>Min: MYR 2</td></tr><tr><td>GrabPay</td><td>No specific requirements</td><td>Min: MYR 2</td></tr><tr><td>Touch 'n Go</td><td>No specific requirements</td><td>Min: MYR 2</td></tr><tr><td>Boost</td><td>No specific requirements</td><td>Min: MYR 2</td></tr><tr><td>Shopback</td><td>No specific requirements</td><td>Min: MYR 2</td></tr></tbody></table>

### PayLater

<table><thead><tr><th width="196">Payment Method</th><th width="163">Requirements</th><th>Minimum and Maximum Amount</th></tr></thead><tbody><tr><td>PayLater by Grab</td><td>No specific requirements</td><td>Min: MYR 2</td></tr><tr><td>SPayLater</td><td>No specific requirements</td><td>Min: MYR 2</td></tr><tr><td>Atome</td><td>No specific requirements</td><td>Min: MYR 10</td></tr></tbody></table>

{% hint style="info" %}
If you would like to have a service agreement with DOKU, please contact our Sales team by filling the following [form](https://www.doku.com/en-US/contact-sales?utm_source=docs)
{% endhint %}


# Finance & Settlement


# Settlement Time

## Indonesia

Settlement times for Indonesian Business Accounts vary depending on the payment method and settlement scheme (aggregator or direct). The table below outlines the settlement period under the Aggregator settlement scheme for each payment method:

<table><thead><tr><th width="249.33333333333331">Payment Type</th><th>Payment Channel or Acquiring Bank</th><th>Settlement Period (Working Days)</th></tr></thead><tbody><tr><td>Cards</td><td>BNI Cybersource</td><td>T+2</td></tr><tr><td>Cards</td><td>Other Acquirings</td><td>T+3</td></tr><tr><td>Virtual Account<br><br></td><td>BCA</td><td>T+2</td></tr><tr><td>Virtual Account</td><td>DOKU</td><td>T+2</td></tr><tr><td>Virtual Account</td><td>Other Banks</td><td>T+1</td></tr><tr><td>e-Wallet</td><td>OVO</td><td>T+2</td></tr><tr><td>e-Wallet</td><td>ShopeePay</td><td>T+2</td></tr><tr><td>e-Wallet</td><td>LinkAja</td><td>T+1</td></tr><tr><td>e-Wallet</td><td>DANA</td><td>T+2</td></tr><tr><td>e-Wallet</td><td>DOKU e-Wallet</td><td>T+1</td></tr><tr><td>e-Wallet</td><td>i.saku</td><td>T+2</td></tr><tr><td>QR Code</td><td>QRIS</td><td>T+1</td></tr><tr><td>Kartu Kredit Indonesia</td><td>Kartu Kredit Indonesia</td><td>T+2</td></tr><tr><td>PayLater</td><td>Akulaku</td><td>T+2</td></tr><tr><td>PayLater</td><td>Kredivo</td><td>Tuesdays and Fridays</td></tr><tr><td>PayLater</td><td>Indodana</td><td>T+2</td></tr><tr><td>Convenience Store</td><td>Alfa Group</td><td>T+4</td></tr><tr><td>Convenience Store</td><td>Indomaret</td><td>T+4</td></tr><tr><td>Direct Debit</td><td>BRI</td><td>T+1</td></tr><tr><td>Direct Debit<br></td><td>Allo Bank</td><td>T+2</td></tr><tr><td>Direct Debit</td><td>CIMB</td><td>T+3</td></tr><tr><td>Direct Debit</td><td>Mandiri</td><td>T+2</td></tr><tr><td>Digital Banking</td><td>Jenius Pay</td><td>T+2</td></tr><tr><td>Internet Banking</td><td>BRImo e-Payment</td><td>T+1</td></tr><tr><td>Internet Banking</td><td>Internet Banking Muamalat</td><td>T+1</td></tr><tr><td>Internet Banking</td><td>OCTO Clicks</td><td>T+1</td></tr><tr><td>Internet Banking</td><td>Danamon Online Banking</td><td>T+1</td></tr><tr><td>Internet Banking</td><td>PermataNet</td><td>T+1</td></tr></tbody></table>

> **Daily settlements are processed on working days, 12:00–14:00 (GMT+7)**

The above settlement period only applies to corporate merchants with a local bank account. Merchants with an overseas bank account or a bank account with a non-IDR currency may have a weekly, bi-weekly, or monthly settlement period depending on the agreement with DOKU.

{% hint style="warning" %}
DOKU will not settle your funds if your business account has not been verified.
{% endhint %}

## Malaysia

Settlement times for Malaysian Business Accounts vary depending on the payment method. The table below outlines the settlement period for each payment method:

<table><thead><tr><th width="249.33333333333331">Payment Method</th><th>Payment Channel or Acquiring Bank</th><th>Settlement Period (Working Days)</th></tr></thead><tbody><tr><td>Internet Banking</td><td>FPX</td><td>T+1</td></tr><tr><td>Cards</td><td>All Acquirings</td><td>T+2</td></tr><tr><td>e-Wallet</td><td>Touch 'n Go</td><td>T+2</td></tr><tr><td>e-Wallet</td><td>GrabPay</td><td>T+2</td></tr><tr><td>e-Wallet</td><td>ShopeePay</td><td>T+2</td></tr><tr><td>PayLater</td><td>PayLater by Grab</td><td>T+2</td></tr><tr><td>PayLater</td><td>SPayLater</td><td>T+2</td></tr></tbody></table>

> **Daily settlements are processed on working days, 12:00–14:00 (GMT+8)**


# Pricing and Fees

The fee varies for each payment method. For the full pricing list, please visit [doku.com/pricing](https://www.doku.com/en-US/pricing).


# Refund & Chargeback


# 🇮🇩 Refund & Chargeback

## Refund

### Terms and Conditions

1. Merchant shall be entitled to void the transaction of Customer if that transaction is suspiciously has the potential to harm the Merchant in the future. The voidance information is submitted to DOKU in order to void such suspicious transactions. If the transaction is already running, the refund process shall be conducted in accordance with the provision as set out in the T\&Cs.
2. With limitation related to transactions that are suspected of violating the law, fraud, suspicious, or violating the provisions of the T\&Cs and/or shall be adjusted to respective Payment Method policies, provisions regarding refunds may apply in accordance with the policies of the Merchant, that is:
   * Refund requests approved by the Merchant will be notified to DOKU. Notification to DOKU must include at least information regarding the Customer's name, email, contact number, transaction ID, bank account details or DOKU e-Wallet ID, and the amount to be returned;
   * DOKU will validate the refund request.
3. Refunds for all transactions shall only be made to Customers through a bank account or DOKU e-Wallet.
4. For the avoidance of doubt, DOKU reserves the right to refund the Customer at its sole discretion upon notice to the Merchant after the commencement of the refund process and the Merchant warrants that DOKU's actions does not constitute a violation by DOKU and the Merchant will indemnify and release DOKU from and any losses and claims from the Sub-Merchant and/or the Customer at DOKU's discretion. Merchant agrees to bear the refund amount.
5. In terms of Aggregator Service, Merchant hereby grant the approval to the DOKU to use the amount of settlement to make a refund. If the amount of settlement is not sufficient to deduct the refund, the Merchant must pay the amount of refund or such amount of the deduct within 7 (seven) business days to DOKU.
6. DOKU will return the money to the Customer's bank account no later than 10 (ten) business days after the request from the Merchant is received clearly and correctly.
7. If the initial transaction was paid using DOKU e-Wallet, DOKU will return the money to the same DOKU e-Wallet account by using the source of funds in the initial transaction no later than 3 (three) business days after the request from the Merchant is received.
8. DOKU shall not refund over the MDR and/or any other cost, only for the price of the Product.
9. Refund Service Fees are as shown in the table below. The Service Fees will be deducted by DOKU from the settlement amount. The fees below are excluding applicable VAT.

| Settlement Method                                 | Fee per Transaction |
| ------------------------------------------------- | ------------------- |
| DOKU e-Wallet                                     | IDR 2,500           |
| Bank Transfer with an amount below IDR 25,000,000 | IDR 6,500           |

#### Card Transactions

For Card transactions, the following are the refund details:

* will be done through the cancellation API or by instruction from Merchant via email;
* will only be refunded to the original credit card of the customer that is used for the transaction.

#### Non-Card Transactions

Non-Card (other) transactions can be refunded via bank account or DOKU e-Wallet. The following are the refund details:

* For refund to bank accounts, there is a limitation of maximum IDR 25,000,000 (twenty-five million Rupiah) per refund disbursement.
* For refund to e-Wallet, the maximum limits will follow the e-Wallet regulation as follows:
  1. Maximum balance of IDR 2,000,000 for users who are not KYC'd.
  2. Maximum balance of IDR 20,000,000 for users who have been KYC'd.
  3. Maximum turnover of IDR 40,000,000 for both KYC and non-KYC users within 30 days.
* Refund will be done through DOKU's disbursement API or Refund Service API. Either API shall only be used for the purpose of Refund to the Customer and not for any other purpose without the written permission from DOKU.&#x20;
* Merchant must place a deposit in DOKU account in IDR with detail as follows:
  * Bank Name: Bank Central Asia
  * Account Name: PT Nusa Satu Inti Artha
  * Account Number: 092-1453212
  * Bank Branch: Jakarta Tebet Saharjo

Flow of Refunds using DOKU disbursement service will be as follows:

1. Merchant must make a deposit to DOKU account as the source of refunds.
2. Merchant must already have the customer's bank information (bank name, account name, account number) if the initial transaction was made via Virtual Account or Convenience Store, or the customer's e-Wallet ID if the initial transaction was made via e-Wallet.
3. Merchant will send the payout instruction to DOKU by API.
4. DOKU will execute the payout in real time.

Flow of Refunds using DOKU Refund service API will be as follows:

1. Merchant must make a deposit to DOKU account as the source of refunds.
2. Merchant will hit DOKU's Refund API and DOKU will return with a link.
3. Merchant or DOKU will send the link to the customer.
4. Customer will open the link and follow the instructions
5. Once customer completes all information and the information provided by Customer is correct, DOKU will execute the payout.

## Chargeback

### Terms and Conditions

Refutation is a reporting process that has the potential to become a Chargeback from the Customer to the issuer which shall be forwarded to the Acquirer.

1. The Parties shall coordinate to settle the Refutation and DOKU shall be entitled to request necessary information from the Merchant in relation with the settlement process and Merchant shall support the Refutation process.
2. DOKU has the right to submit documents related to the Refutation to the Acquirer, including but not limited to the details of the card transaction and transaction log.
3. If requested, the Merchant shall submit documents related to the Refutation to the Acquirer, including but not limited to the statement letter of the Merchant of Refutated Transaction, delivery receipt, and product acceptance.
4. If Refutation is proven to become Chargeback:
   1. In terms of Direct Merchant, Acquirer shall deduct the fund from the Merchant’s account in the amount that will be credited again to the Customer’s account as the result of the Chargeback; and/or
   2. In terms of Aggregator Service, DOKU shall deduct funds to be credited to the Customer as the result of the Chargeback to the following Settlement for the Merchant. If the fund deposit in DOKU in the escrow account is not sufficient to be deducted, Merchant shall pay to DOKU in the amount that will be credited to the Customer as the result of the Chargeback within 7 (seven) Business Days after the notification of the Chargeback and the importance of the payment to DOKU.
5. DOKU shall only process the request for Chargeback that comes from the Acquirer, and DOKU shall have the right to decline the request for the Chargeback which comes other than the Acquirer.
6. All forms of Chargeback from third parties shall not be the responsibility of DOKU.


# 🇲🇾 Refund & Chargeback

Refer to <https://senangpay.com/terms-of-agreement/> for the terms and conditions.


# Promo Engine

Create and manage promotional campaigns to boost your sales

## Introduction

Promo Engine is a tool provided in DOKU Dashboard that enables merchants to create a promo where the customers can apply a discounted fee of their purchase based on the amount that is allowed by the merchants. The discount can either be percentage-based or flat-based discounts. The performance of your promos can also be tracked using our analytics and reporting. Promo Engine serves as a powerful marketing tool to enable your business to attract, engage, and retain customers through strategic and targeted promotional activities.&#x20;

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Set Up a Promo</strong><br><br>Create a promo to apply discounts, rewards, or offers during payment transactions</td><td><a href="/pages/3GiJ8w8EC9qWGtPthBrH">/pages/3GiJ8w8EC9qWGtPthBrH</a></td></tr></tbody></table>

***

## Key Features

#### **Campaign Management**&#x20;

Promo Engine allows merchants to design and manage diverse promotional campaigns, including discounts and cashback offers.

#### **Rule-Based Promo System**

You can define specific rules and conditions that trigger promotions, ensuring targeted and strategic incentive programs. For instance, a discount might be applied only if a customer makes a purchase above a certain amount or uses a specific payment method. Rules can also be applied for other objects such as:

1. Per Transaction Value
   * Merchants can customize and fine-tune promotional campaigns based on the specific value of individual transactions. This feature is designed to offer flexibility and precision in targeting promotions, ensuring that incentives are applied according to transaction amounts.
2. Per Quota
   * Merchants can manage the distribution and usage of promotions by setting specific redemption quotas. This functionality adds a layer of control and flexibility to promotional campaigns, allowing merchants to regulate the number of times a particular promotion can be redeemed.
3. Per User or Unique ID
   * Merchants can deliver highly personalized and targeted promotions by applying incentives on an individual basis. This functionality enables the application of promotions based on unique user identifiers, allowing for a more tailored and strategic approach to marketing
4. Per Payment Method
   * Merchants can strategically manage and optimize promotions based on different payment methods. This functionality empowers merchants to customize incentives for specific payment methods, encouraging customers to utilize preferred or strategic channels.

{% hint style="info" %}
At present, only Cards and DOKU e-Wallet payment methods are available on Promo Engine.
{% endhint %}

5. Per Time or Period
   * Merchants can schedule and control promotions based on specific time periods. This functionality empowers merchants to strategically deploy promotions during targeted hours, days, or events, maximizing the impact of incentives.
6. Per Discount Amount
   * Merchants can apply dynamic discounts based on the total transaction amount. This functionality provides the flexibility to create promotions where the discount amount varies depending on the overall value of the customer's purchase.

#### Budget Control and Notification

Budget Control is a feature to manage and control promo spending. This feature ensures that promotional activities align with predefined budget constraints, promoting financial transparency and preventing overspending. Once merchants set the budget, merchants will receive notifications when budgets are near to depletion or exceeding predefined limits.

#### Promo Duplication

Promo Engine allows merchants to create similar promos by duplicating existing ones. This feature not only helps to save a lot of time and effort to set up a promo, but it ensures consistency of the information and details of the promo that is to be created.

#### Reporting and Analytics

Comprehensive reporting tools are offered in DOKU Dashboard that enable you to analyze the performance of promotional campaigns, understand customer behavior, and make data-driven decisions for future strategies.

***

## Benefits

| Benefit                                     | Description                                                                                                                                                                    |
| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Increased Customer Engagement**           | Promo Engine helps create attractive incentives that encourage customers to interact, make purchases, and engage with loyalty programs.                                        |
| **Boosted Sales**                           | Promotions drive revenue by attracting new customers, increasing average order value, and encouraging repeat purchases. Upsell or cross-sell complementary products with ease. |
| **Enhanced Customer Loyalty and Retention** | Personalized promotions and loyalty initiatives foster strong relationships and repeat business by encouraging customers to stay with your brand.                              |
| **Seasonal Strategies**                     | Easily manage holiday- or event-specific promotions such as **Ramadan, Christmas, or Back-to-School**, ensuring your campaigns align with demand cycles.                       |
| **Data-Driven Marketing**                   | Built-in analytics help track campaign performance, customer behavior, and preferences to refine future marketing strategies.                                                  |
| **Competitive Advantage**                   | Effective use of Promo Engine gives businesses a market edge by making them more attractive to customers and increasing brand visibility.                                      |
| **Adaptability**                            | Promotional campaigns can be modified at any time to respond to changing trends, market conditions, or customer preferences.                                                   |

***

## FAQ

<details>

<summary>How does Promo Engine work?</summary>

When customers proceed to the payment page, they will be presented with an option to apply a promo code. If eligible, entering the code will trigger an immediate deduction from the total amount due. This seamless experience enhances customer satisfaction and helps increase conversion rates.

</details>

<details>

<summary>Can I customize the conditions under which a Promo is offered?</summary>

Yes, you have full control over the conditions for applying this discount. Set specific criteria such as minimum order value, specific products, or purchase combinations to ensure the promo aligns with your marketing goals.

</details>

<details>

<summary>Can I combine one Promo with other types of promotions?</summary>

No, currently the promo engine does not support the combined promotion with other promo types, but soon you have the flexibility to design promotions that combine the "Promo for Discounted Amount on the Payment Page" with other promo types, such as cashback rewards or loyalty programs. This versatility allows you to create compelling and multi-dimensional offers.

</details>

<details>

<summary>Are there any limitations to the types of products or services eligible for a Promo?</summary>

You can specify which products or services are eligible for the promo. This allows you to target specific items or categories that align with your promotional objectives.

</details>

<details>

<summary>Can I modify my Promos in real-time?</summary>

Yes, Promo Engines enables adaptation and modification of promotional strategies in real-time, allowing for quick responses to market trends, seasonal changes, or shifts in customer behavior. Please note that Budget and Terms of Conditions cannot be altered once they have been activated. You have the option to save the campaign as a draft and schedule the activation of the promo based on a date that you designated.

</details>

<details>

<summary>How to create a Promo test?</summary>

You can test to set up a Promo with [DOKU Sandbox](https://dashboard.doku.com/bo/login?utm_source=docs). This will help you to visualize how your Promo would look like before releasing it in the production environment. Visit [Set Up a Promo](/get-started/manage-business/set-up-a-promo) for the detailed guide.

</details>


# FlexiBill

FlexiBill helps businesses automate their entire billing cycle. Built for businesses that bill the same customers repeatedly, FlexiBill reduces missed payments, cuts down on manual follow-ups, and keeps your subscriptions and invoices organized in one place.

## Key Features

| Feature                      | Description                           |
| ---------------------------- | ------------------------------------- |
| **Invoice generation**       | Automatic, per billing cycle          |
| **Delivery channel**         | Email + WhatsApp                      |
| **Billing cycle management** | Interval or specific date, auto-renew |
| **Service fee pass-through** | Configurable                          |
| **Bulk billing**             | Upload file, up to 1,000 rows         |
| **API integration**          | Host-to-host supported                |

### Subscription and Billing

A billing logic engine to automate recurring payments, manage subscriptions, and streamline invoicing and renewals. It controls when invoices are issued, how billing cycles are structured, what pricing model applies, and how bills are delivered to customers.

* Create recurring or one-time billing for any billing cycle
* Deliver invoices automatically via Email or WhatsApp
* Track payment status and outstanding invoices in real time

**The core of FlexiBill — where your subscription engine lives.**

👉 [*Learn more*](/subscription-and-billing/flexibill/subscription-and-billing)

### Member Center

Manage your customer database — register members, store their billing information, and link them to subscriptions.

* Centralized customer registry
* Custom fields and member grouping
* Direct link to subscription and billing records

👉 [*Learn more*](/subscription-and-billing/flexibill/member-center)

### Account Billing

An auto-debit engine for businesses that need to charge customers automatically at regular intervals — without requiring manual payment each cycle. Securely stores customer payment credentials once and charges them on schedule.

* Fully automated charge execution via DOKU Hosted Scheduler or merchant-controlled via Merchant Hosted Scheduler
* PCI-DSS compliant card tokenization — no raw card data stored on merchant servers
* Supports Credit Card (SALE + RECURRING / MOTO) and Direct Debit channels
* Multiple touch points: API, Back Office (no-code), and SFTP bulk file upload

**The auto-debit engine — charge customers automatically, on schedule.**

👉 [*Learn more*](/subscription-and-billing/flexibill/account-billing)

### Billing Portal

*Billing Portal is a no-code, branded community app that lets merchants customize their billing channel and enables customers to easily view and pay their bills — powered by FlexiBill and DOKU payment integration.*

* no-code, branded — represents merchant identity without requiring a developer
* customize their billing channel — gives merchants flexibility while building customer trust
* customers to easily view and pay — improves accessibility and enables digital payment
* powered by FlexiBill and DOKU payment integration — delivers seamless integration with multiple payment options

👉 [*Learn more*](/subscription-and-billing/flexibill/billing-portal)

## Benefits

**🔄 Fully Automated Recurring Billing**

Set a billing cycle once and FlexiBill handles invoice generation and delivery automatically — no manual intervention needed for every cycle.

**📬 Multi-Channel Invoice Delivery**

Reach customers where they are. Invoices and receipts are sent via Email and WhatsApp (via PayChat), ensuring higher open and payment rates.

**💰 Higher Revenue Collection Rate**

Scheduled billing with automatic reminders reduces overdue invoices and improves on-time payment rates across your customer base.

**📊 Real-Time Transaction Monitoring**

Track expected vs. received revenue, outstanding invoices, and overdue bills from a single dashboard — no Excel recaps needed.

**⚙️ Flexible Pricing Models**

Support for Flat Fee, Per Unit, Tiered, Volume, and Stairstep pricing — adaptable to any business model.

**🔗 API Integration Ready**

Connect FlexiBill directly to your existing application via host-to-host API for fully programmatic billing management.

***

## Use Cases

FlexiBill is built for businesses that bill the same customers regularly at scale.\
**Industries it fits well:**

* 🎓 **Education** — Tuition, extracurricular fees, lab fees
* 🏠 **Property** — Rent, utilities, parking, boarding-house (kos) fees
* 💪 **Fitness** — Gym memberships, personal trainer fees, class packages
* 🌐 **Internet (ISP)** — Internet subscriptions, plan upgrades and downgrades

**Is FlexiBill right for you?**\
You're a strong fit if:

* ✅ You bill the same customers weekly or monthly
* ✅ You have more than 100 members or customers
* ✅ Your team spends time on manual billing recaps in Excel

***

## Terms & Conditions

* Must be registered with a **corporate business account** on DOKU Dashboard
* Business must be **KYB (Know Your Business) verified** before activating FlexiBill
* FlexiBill is not available for personal merchant accounts

***

## FAQ

<details>

<summary>Who can use FlexiBill?</summary>

FlexiBill is available to **Corporate** and **International** merchants on DOKU Dashboard who have completed KYB (Know Your Business) verification. Personal merchant accounts are not eligible.

</details>

<details>

<summary>Can FlexiBill automatically charge customer cards without them having to pay manually each cycle?</summary>

Yes. **Account Billing** — FlexiBill's auto-debit engine — allows you to securely store a customer's card or bank account credentials once and automatically charge them on schedule, whether daily, weekly, monthly, or annually. Customers do not need to take any action after the initial registration.

This is separate from **Subscription and Billing**, which sends invoices that customers pay manually via a payment link. Choose Account Billing when you need fully automatic, invisible payment collection. → [Learn more about Account Billing](/subscription-and-billing/flexibill/account-billing)

</details>

<details>

<summary>What is the difference between Subscription and Billing and Account Billing?</summary>

Both handle recurring billing, but they work differently:

<table><thead><tr><th width="141.5625">Aspect</th><th>Subscription and Billing</th><th>Account Billing</th></tr></thead><tbody><tr><td><strong>How customers pay</strong></td><td>Manually via payment link in invoice or auto debit</td><td>Automatically charged — no customer action needed</td></tr><tr><td><strong>Billing trigger</strong></td><td>Invoice issued → customer pays</td><td>Card charged directly on schedule</td></tr><tr><td><strong>Best for</strong></td><td>Businesses where customers are accustomed to receiving and settling invoices</td><td>Businesses that need seamless, invisible auto-debit (SaaS, insurance, memberships)</td></tr><tr><td><strong>Payment method</strong></td><td>Any available payment method</td><td>Credit Card (RECURRING/MOTO) or Direct Debit only</td></tr></tbody></table>

Use Subscription and Billing for invoice-based collection. Use Account Billing for fully automatic card-on-file charging.

</details>

<details>

<summary>What is the difference between FlexiBill and a Payment Link?</summary>

FlexiBill is a recurring billing platform — it manages subscription lifecycles, automates invoice generation on schedule, and tracks member payment statuses across multiple cycles. A Payment Link is a single-transaction tool that requires a new link to be created manually for each payment, with no recurring logic, member management, or billing cycle automation.

</details>

<details>

<summary>Can FlexiBill handle billing for hundreds or thousands of customers at once?</summary>

Yes. FlexiBill supports bulk billing through two methods: uploading a billing data file (CSV/XLSX) via the Dashboard for up to 1,000 rows per file, or using SFTP batch file upload (available via Account Billing) for high-volume operations at scale. Both automatically generate and deliver invoices to all customers in the batch.

</details>

<details>

<summary>Can FlexiBill send invoices via WhatsApp?</summary>

Yes. When combined with DOKU PayChat, FlexiBill's Subscription and Billing feature can broadcast invoices and receipts directly to customers via WhatsApp. PayChat must be activated separately. Account Billing does not use WhatsApp — charges are executed silently on schedule with a notification sent after each transaction.

</details>

<details>

<summary>Can customers choose their own subscription plan without contacting the merchant?</summary>

Yes. Using the **Pricing Table** feature in Subscription Lifecycle Management, merchants can create a shareable plan selection page that can be distributed via URL or embedded into a website. Customers browse available plans, select one, verify their email, and complete the first payment — entirely self-served. → [Learn more about Pricing Table](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/create-subscription-customer-initiate)

</details>

<details>

<summary>Is customer card data stored securely?</summary>

Yes. FlexiBill's Account Billing feature uses **PCI-DSS compliant tokenization** managed by DOKU. Sensitive card data — card numbers, CVVs, and expiry dates — never touches the merchant's server. Merchants work with secure tokens only, and DOKU handles all credential vaulting and storage.

</details>


# Activation

FlexiBill is activated through a self-service process on the [DOKU Dashboard](https://dashboard.doku.com/bo/dashboard). Once activated, your business gains full access to the subscription and billing engine — including recurring invoicing, member management, and payment automation.

{% hint style="info" %}
Activation is available for **Corporate** and **International** merchants only. Personal merchant accounts are not eligible.
{% endhint %}

## &#x20;Interactive Demo

{% @supademo/embed demoId="cmpl2b7u8000fza0jqjfuzojn" url="<https://app.supademo.com/demo/cmpl2b7u8000fza0jqjfuzojn>" %}

## Prerequisites

* [ ] Your business is **registered** on [DOKU Dashboard](https://dashboard.doku.com/bo/login).
* [ ] Your **KYB verification** has been **approved**. Check under **Settings → Approval**.
* [ ] Your merchant type is **Corporate** or **International** — not Personal.

{% hint style="warning" %}
If any condition is not met, activation will be blocked. See [Troubleshooting](#troubleshooting) below.
{% endhint %}

## Step-by-Step Guide

{% stepper %}
{% step %}

#### Open the Subscription and Billing Menu

Log in to your [DOKU Dashboard](https://dashboard.doku.com/bo/dashboard). From the left sidebar, navigate to **FlexiBill → Subscription and Billing**.

If FlexiBill has not been activated yet, you will land on the activation page.

<img src="/files/3OXNsIjnqxpVUE0Jd9qP" alt="" height="389" width="624">
{% endstep %}

{% step %}

#### Click Register Now

Click **Register Now** button on the right bottom activation page to start registration process.
{% endstep %}

{% step %}

#### Review Terms & Conditions

Read and agree to the **Terms & Conditions** FlexiBill.
{% endstep %}

{% step %}

#### Confirm Activation

Click **Continue** to confirm. A confirmation screen will appear — FlexiBill is now **ready to use**.

<img src="/files/AciQ8B9gkUSoJTbC2tIa" alt="" height="291" width="403">
{% endstep %}
{% endstepper %}

## What's Next

These are recommended next steps after FlexiBill activation

1. 👉 [Collection and Plan](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/collection-and-plan) — Create collection and plan as product/service offering that you will bill.
2. 👉 [Member Center](/subscription-and-billing/flexibill/member-center) — Register your customers as member before creating subscription.
3. 👉 [Create Subscription](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/create-subscription-merchant-initiate) — Create first subscription by linking a member to a plan and start billing.

***

## Troubleshooting

#### Why did my activation fail?

**KYB verification is not yet complete**

Your business documents may still be under review. FlexiBill is only accessible to merchants with an **approved** KYB status.

<img src="/files/3lGjc9KAuniCQv8VJKmI" alt="" height="280" width="411">

{% hint style="info" %}
**Resolution:** Go to **Settings → Approval** to check your KYB status. If still under review, wait for the approval email. If you believe there is an error, contact [DOKU Support](https://4911a839c120390f42711368869f8cd7.claudemcpcontent.com/mcp_apps?connect-src=https%3A%2F%2Fesm.sh+https%3A%2F%2Fcdnjs.cloudflare.com+https%3A%2F%2Fcdn.jsdelivr.net+https%3A%2F%2Funpkg.com\&resource-src=https%3A%2F%2Fesm.sh+https%3A%2F%2Fcdnjs.cloudflare.com+https%3A%2F%2Fcdn.jsdelivr.net+https%3A%2F%2Funpkg.com+https%3A%2F%2Fassets.claude.ai\&dev=true#).
{% endhint %}

**Business type is Personal**

FlexiBill is restricted to **Corporate** and **International** merchant types. Personal accounts are not eligible.

<img src="/files/JdmAMgZ2uyR8TyFAYoAk" alt="" height="266" width="427">

{% hint style="info" %}
**Resolution:** If your business operates as a corporate entity, contact [DOKU Support](https://4911a839c120390f42711368869f8cd7.claudemcpcontent.com/mcp_apps?connect-src=https%3A%2F%2Fesm.sh+https%3A%2F%2Fcdnjs.cloudflare.com+https%3A%2F%2Fcdn.jsdelivr.net+https%3A%2F%2Funpkg.com\&resource-src=https%3A%2F%2Fesm.sh+https%3A%2F%2Fcdnjs.cloudflare.com+https%3A%2F%2Fcdn.jsdelivr.net+https%3A%2F%2Funpkg.com+https%3A%2F%2Fassets.claude.ai\&dev=true#) to request a merchant type update. Supporting business documents will be required.
{% endhint %}

***

## FAQ

<details>

<summary>How long does KYB verification take?</summary>

KYB review typically takes 1–3 business days after all required documents are submitted. You will receive an email notification once approved.

</details>

<details>

<summary>What happens if I close the activation page before completing it?</summary>

Your progress is not saved. You will need to restart the activation process the next time you navigate to Subscription and Billing.

</details>

<details>

<summary>Can I activate FlexiBill for multiple businesses?</summary>

Each DOKU merchant account is activated separately. If you manage multiple businesses, each must complete its own activation under its respective merchant account.

</details>

<details>

<summary>Who should I contact if activation still fails?</summary>

Reach out to DOKU Support at [care@doku.com](https://4911a839c120390f42711368869f8cd7.claudemcpcontent.com/mcp_apps?connect-src=https%3A%2F%2Fesm.sh+https%3A%2F%2Fcdnjs.cloudflare.com+https%3A%2F%2Fcdn.jsdelivr.net+https%3A%2F%2Funpkg.com\&resource-src=https%3A%2F%2Fesm.sh+https%3A%2F%2Fcdnjs.cloudflare.com+https%3A%2F%2Fcdn.jsdelivr.net+https%3A%2F%2Funpkg.com+https%3A%2F%2Fassets.claude.ai\&dev=true#) or through live chat on the Dashboard. Provide your merchant Client ID and a screenshot of the error for faster resolution.

</details>


# Subscription and Billing

Subscription and Billing is FlexiBill's **bill logic engine**. It controls when invoices are issued, how billing cycles are structured, what pricing model applies, and how bills are delivered to customers.

Every bill in FlexiBill starts here — whether you manage 10 customers or 10,000. Subscription and Billing handles the rules; payment collection follows those rules through a **payment link** or, when combined with **Account Billing**, through **auto-debit**.

{% hint style="info" %}
**Subscription and Billing** defines the billing logic and schedule. **Account Billing** adds the ability to automatically charge a customer's registered card without them needing to act. Both can be used together. → [Learn more about Account Billing](/subscription-and-billing/flexibill/account-billing)
{% endhint %}

## Two Ways to Manage Billing

Subscription and Billing offers two distinct approaches. Choose based on how your business structures its products and how billing is managed operationally:

### Subscriptions

A **plan-based model** — you define your products as Collections and Plans, then link customers to the appropriate plan. The system manages the full subscription lifecycle: billing schedule, invoice issuance, renewals, and status tracking per customer.

Use this when your business sells **defined packages** and needs per-customer lifecycle visibility.

* Configure pricing models: Flat Fee, Per Unit, Tiered, Volume, or Stairstep
* Set billing cycles per plan: daily, weekly, monthly, annual, or specific calendar dates
* Customers can self-subscribe via a shareable **Pricing Table**
* Upgrade, downgrade, or end subscriptions per customer at any time

👉 [*Learn more*](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions)

### Bulk Bill Upload

A **file-based model** — you prepare customer billing data in a CSV or XLSX file and upload it. The system generates and delivers invoices to all customers in the file simultaneously.

Use this when your team **already manages billing data in Excel** or needs to onboard large volumes quickly without configuring individual plans per customer.

* Supports one-time and recurring bill types
* Process up to 1,000 customer records in a single upload
* No plan or collection setup required — billing details are defined in the file

👉 [*Learn more*](/subscription-and-billing/flexibill/subscription-and-billing/billing)

## Which Approach Should I Use?

| Aspect                       | Subscriptions                                 | Bulk Bill Upload                                  |
| ---------------------------- | --------------------------------------------- | ------------------------------------------------- |
| **Bill logic**               | Defined by Collection & Plan configuration    | Defined per row in the uploaded file              |
| **Pricing model**            | Flat Fee, Per Unit, Tiered, Volume, Stairstep | Fixed amount per row                              |
| **Customer setup**           | Registered as Member, linked to a Plan        | Included in the uploaded file                     |
| **Billing cycle**            | Configured in the Plan                        | Configured in the file (`cycle_type`, `interval`) |
| **Plan upgrade / downgrade** | ✅ Supported                                   | ❌ Not applicable                                  |
| **Customer self-subscribe**  | ✅ Via Pricing Table                           | ❌ Not applicable                                  |
| **Suitable volume**          | Any — from 1 to thousands                     | High volume (100+ per cycle)                      |
| **Best for**                 | Defined packages, tiers, membership plans     | Existing Excel-based billing, fast migration      |

## Features & Benefits

**🗓️ Flexible Bill Logic & Scheduling**

Define exactly when bills are issued per customer. Choose between **interval billing** (every N days/months from start date) or **specific date billing** (a fixed calendar date each month). Start dates, end conditions, and grace periods are all configurable.

**💲 Multiple Pricing Models**

Support for five pricing models — Flat Fee, Per Unit, Tiered, Volume, and Stairstep — in Subscription Lifecycle Management. Each model determines how the invoice amount is calculated based on quantity or usage.

**💳 Payment via Link or Auto-Debit**

Invoices generated by Subscription and Billing can be paid by customers **via a payment link** (manual) or **automatically via auto-debit** when Account Billing is activated. Both payment paths are supported for the same subscription.

**📬 Multi-Channel Invoice Delivery**

Invoices and receipts are delivered via **Email** and/or **WhatsApp** (via PayChat). Delivery channel is configurable per billing batch or per collection.

**📊 Revenue & Outstanding Invoice Tracking**

Monitor expected vs. received revenue, current and overdue outstanding invoices, and full activity logs per bill — all from the Billing Summary dashboard.

**🔗 API Integration**

Register bills and subscriptions programmatically via the host-to-host API — suitable for businesses with existing customer platforms that need to automate billing without dashboard interaction.

## How It Works

<figure><img src="/files/vvB2Lbzkl6CrzK49JJrX" alt=""><figcaption></figcaption></figure>

## Use Cases

{% tabs %}
{% tab title="Education" %}

<table><thead><tr><th width="153.8046875">Customer POV</th><th>Use Case Details</th></tr></thead><tbody><tr><td></td><td><p><strong>Description</strong> A school needs to bill hundreds of students every month across different fee types — tuition, extracurricular, and lab fees — with varying amounts per student. </p><p></p><p><strong>Solution</strong> Use Bulk Bill Upload to process the entire student roster from an Excel file each month. Each row defines the student's billing detail and amount. Invoices are delivered via Email or WhatsApp automatically. </p><p></p><p><strong>How It Works</strong> Prepare billing file from student records → upload to FlexiBill → invoices issued and delivered to all students simultaneously → payments tracked per student in real time. </p><p></p><p><strong>Features Used</strong> Bulk Bill Upload, Recurring Bill, Email + WhatsApp delivery</p></td></tr></tbody></table>
{% endtab %}

{% tab title="Property" %}

<table><thead><tr><th width="159.765625">Customer POV</th><th>Use Case Details</th></tr></thead><tbody><tr><td></td><td><p><strong>Description</strong> A property manager needs to bill monthly rent and utility fees to tenants across multiple units. Some tenants pay monthly on the 1st; others pay on specific dates based on their contract start. </p><p></p><p><strong>Solution</strong> Use Subscription Lifecycle Management — register each tenant as a Member, create a Plan per unit type, and configure the billing date per tenant's contract. The system handles each tenant's schedule independently. </p><p></p><p><strong>How It Works</strong> Create Collection "Unit Rentals" → create Plans per unit → subscribe tenants to their plan with the correct start date → invoices issued automatically per tenant's individual schedule. </p><p></p><p><strong>Features Used</strong> Subscription Lifecycle, Collection and Plan, Member Center</p></td></tr></tbody></table>
{% endtab %}

{% tab title="Fitness" %}

<table><thead><tr><th width="156.65234375">Customer POV</th><th>Use Case Details</th></tr></thead><tbody><tr><td></td><td><p><strong>Description</strong> A gym sells Basic, Pro, and VIP monthly memberships. Members want to subscribe online and not think about payment each month. </p><p></p><p><strong>Solution</strong> Use Subscription Lifecycle Management with a Pricing Table for self-service sign-up. Combine with Account Billing to enable auto-debit — members register their card once and are charged automatically every month. </p><p></p><p><strong>How It Works</strong> Create plans (Basic, Pro, VIP) → publish Pricing Table → members self-subscribe and register card → monthly charge runs automatically via Account Billing. </p><p></p><p><strong>Features Used</strong> Subscription Lifecycle, Pricing Table, Account Billing (auto-debit)</p></td></tr></tbody></table>
{% endtab %}

{% tab title="ISP" %}

<table><thead><tr><th width="164.203125">Customer POV</th><th>Use Case Details</th></tr></thead><tbody><tr><td></td><td><p><strong>Description</strong> An internet service provider offers monthly packages (10 Mbps, 20 Mbps, 50 Mbps) and needs to manage upgrades, downgrades, and automatic monthly invoicing per subscriber. </p><p></p><p><strong>Solution</strong> Use Subscription Lifecycle Management — create a Collection with a Plan per package. When a subscriber upgrades, the merchant creates a new subscription on the updated plan. Invoices are automatically issued each month. </p><p></p><p><strong>How It Works</strong> Create Collection "Internet Packages" → create Plans per bandwidth tier → subscribe customers → monthly invoices issued per plan → upgrade by ending old subscription and creating new one on higher plan. </p><p></p><p><strong>Features Used</strong> Subscription Lifecycle, Collection and Plan, Recurring Bill</p></td></tr></tbody></table>
{% endtab %}
{% endtabs %}

## Merchant & Customer Experience

### Merchant View

Merchants configure bill logic and monitor collections from the DOKU Dashboard:

**Setting up billing:**

* Configure Collections and Plans under **Subscription and Billing → Collection**
* Register customers as Members under **Member Center**
* Create subscriptions individually via **Subscription → Create Subscription**, or in bulk via **Bill → Create Bill → Upload File**
* Share a **Pricing Table** URL or embed it on a website for customer self-subscription

**Monitoring billing:**

* Track all active subscriptions under the **Subscription** tab
* Monitor invoice delivery status and payment status per bill under **Bill**
* View revenue summary — expected, received, and overdue — in **Billing Summary**
* Filter and search bills by member name, bill identifier, file name, or payment status

### Customer View

Customers interact with billing through their inbox or messaging app:

* Receive an **invoice via Email or WhatsApp** containing the billing details and a payment link
* Click the payment link to review the invoice and complete payment using their preferred method
* Optionally enable **auto-debit** on the invoice page — future cycles are then charged automatically without any action required
* Receive a **receipt via Email** after each successful payment

## Terms & Conditions

* Merchant must be registered with a **corporate business account** on DOKU Dashboard
* Business must be **KYB verified** on DOKU Dashboard
* WhatsApp delivery requires a separate **DOKU PayChat** activation
* Auto-debit payment collection requires activating **Account Billing** separately → [Activate Account Billing](/subscription-and-billing/flexibill/account-billing/account-billing-activation)

## FAQ

<details>

<summary>What is the difference between Subscription Lifecycle Management and Bulk Bill Upload?</summary>

**Subscriptions** is a plan-based model where you define your product catalog (Collections and Plans), register each customer individually as a Member, and the system manages their billing lifecycle — schedule, renewals, upgrades, and status — per customer.

**Bulk Bill Upload** is a file-based model where billing details (amount, schedule, customer data) are defined per row in an uploaded CSV or XLSX file. It does not require setting up Collections or Plans — it is designed for teams that already manage billing in Excel and want to process large volumes quickly.

Use Subscription Lifecycle Management when you need per-customer plan visibility and lifecycle management. Use Bulk Bill Upload when you need to process a large roster fast with minimal pre-configuration.

</details>

<details>

<summary>Can customers pay automatically without clicking a payment link each cycle?</summary>

Yes — when **Account Billing** is activated alongside Subscription and Billing. Subscription and Billing defines when and how much to bill; Account Billing executes the charge automatically on the customer's registered card or bank account on the billing date.

Customers can also opt into auto-debit themselves from the invoice page during their first payment. → [Learn more about Account Billing](/subscription-and-billing/flexibill/account-billing)

</details>

<details>

<summary>Can I use different pricing models for different customers?</summary>

Yes. Each Plan in a Collection is configured with its own pricing model independently. A single Collection can have a Flat Fee plan for standard customers, a Per Unit plan for customers billed by usage, and a Tiered plan for high-volume customers — all running simultaneously. Customers are linked to the plan that applies to them.

</details>

<details>

<summary>What happens if a customer does not pay their invoice before the due date?</summary>

The invoice transitions to **Overdue** status after the due date passes. If a grace period is configured, the customer can still pay within that window without penalty and the service remains active. Once the grace period ends without payment, the subscription moves to **Expired** status.

Overdue invoices are visible in the Billing Summary and can be filtered in the Bill list for follow-up.

</details>

<details>

<summary>Can a customer upgrade or downgrade their plan?</summary>

Plan changes are managed at the subscription level. To move a customer to a different plan, end their current subscription and create a new one on the target plan with the appropriate start date. The old subscription's billing stops; the new subscription's billing begins from the configured start date.

</details>

<details>

<summary>Is the payment link the same for every billing cycle?</summary>

No. Each billing cycle generates a unique payment link. Sharing a link from a previous cycle will not allow payment for the current bill.

</details>

<details>

<summary>Can I bill customers via API instead of the dashboard?</summary>

Yes. The **Host-to-Host Integration** API allows you to create bills and subscriptions programmatically from your backend system. This is suitable for platforms with existing customer databases that need billing to be triggered automatically as part of their application flow. → [API Reference](/subscription-and-billing/flexibill/subscription-and-billing/host-to-host-integration)

</details>


# Billing

Billing is the **operational hub** of Subscription and Billing — where invoices are tracked, payment statuses are monitored, and bulk billing files are submitted. Every invoice generated by a subscription or a bulk upload flows through here.

If **Subscriptions** is where you configure *what* and *when* to bill, **Billing** is where you see *what happened* and *what's outstanding*.

***

## Bill Types

Before creating a bill, you need to decide which bill type fits your use case. FlexiBill supports two bill types, and the choice affects how the billing schedule is configured and how long the billing relationship with a customer lasts.

### Recurring Bill

A recurring bill is an invoice issued automatically on a repeating schedule — daily, weekly, monthly, or on a specific calendar date — until the subscription ends or is stopped manually.

**Use recurring billing when:**

* You charge customers the same service regularly (tuition, rent, membership, internet subscription)
* Billing continues over multiple cycles without manual intervention
* You want to define a fixed end — after X times, on a specific date, or unlimited

**Example:** A gym charges members IDR 200,000 every month. The invoice arrives automatically on the same date each cycle until the subscription ends.

### One-Off Charge Bill

A one-off charge bill is a single, non-repeating invoice issued once for a specific transaction. It does not generate future invoices after the customer pays.

**Use one-off charging when:**

* You need to bill a customer for something outside their regular subscription (registration fee, penalty, event fee, ad hoc service)
* The charge is not expected to recur on a schedule
* You want to issue a standalone invoice without creating a subscription

**Example:** A school charges a student IDR 300,000 for a study tour. This is issued once — the student pays it, and no further invoices are generated for this bill.

### Side-by-Side Comparison

<table><thead><tr><th width="202.24609375">Aspect</th><th>Recurring Bill</th><th>One-Off Charge Bill</th></tr></thead><tbody><tr><td><strong>Invoice frequency</strong></td><td>Repeats on schedule</td><td>Issued once only</td></tr><tr><td><strong>Billing cycle</strong></td><td>Daily, weekly, monthly, specific date</td><td>No cycle — single transaction</td></tr><tr><td><strong>End condition</strong></td><td>After X times, specific date, or unlimited</td><td>Ends after one payment</td></tr><tr><td><strong>Common use cases</strong></td><td>Tuition, rent, memberships, internet packages</td><td>Registration fees, penalties, event fees, ad hoc charges</td></tr><tr><td><strong>Available via</strong></td><td>Bulk Bill Upload, Subscriptions (Recurring plan)</td><td>Bulk Bill Upload, Subscriptions (One-Off Charge plan)</td></tr></tbody></table>

{% hint style="info" %}
Both bill types can be issued through **Bulk Bill Upload** (file-based) or through **Subscriptions** (plan-based). The bill type is selected during setup — not after the invoice is issued.
{% endhint %}

***

## How to Generate a Bill

Once you know your bill type, choose how you want to submit it to FlexiBill. Bills can be generated through two channels — use whichever fits your technical setup and operational workflow.

### Back Office (No-Code)

Generate bills directly from the DOKU Dashboard without any technical integration. Suitable for merchants who manage billing manually or want to get started quickly without engineering resources.

**Via Bulk Bill Upload:** Navigate to **Subscription and Billing → Bill → Create Bill → Upload File**, prepare your customer data in a CSV or XLSX template, and upload. FlexiBill processes the file and delivers all invoices automatically.

**Via Subscriptions:** Navigate to **Subscription and Billing → Subscription → Create Subscription**, select the member and plan, configure the billing schedule, and confirm. The system manages all subsequent invoice issuance automatically.

**Best for:**

* Teams without engineering resources
* Low-to-medium volume operations
* Businesses migrating from manual billing and not yet ready for API integration

### API (Host-to-Host Integration)

Generate bills programmatically by integrating the FlexiBill API directly into your application or backend system. Suitable for merchants who want billing to be triggered automatically as part of their existing platform workflows — without dashboard interaction.

**Generate Bill API:** Call the bill generation endpoint from your backend with the customer's billing details. FlexiBill creates the invoice and delivers it immediately. Supports both one-time and recurring bill types with full schedule configuration.

**Create Subscription API:** Register a customer subscription programmatically — linking the customer to a plan and schedule — so that all subsequent invoice cycles are managed automatically by FlexiBill.

**Best for:**

* Platforms with existing customer onboarding flows (e.g., activate account → trigger first bill)
* High-volume operations where dashboard upload is impractical
* Businesses requiring real-time billing triggers based on system events

{% hint style="info" %}
Both channels produce the same output — invoices delivered to customers via Email or WhatsApp, tracked in the Bill list with the same activity log and payment status visibility. → [API Reference](broken://pages/LhoRsPDx0H6bN5c9pPS5)&#x20;
{% endhint %}

***

## Features & Benefits

**📤 Bulk Bill Upload**

Submit a CSV or XLSX file containing billing data for hundreds of customers at once. FlexiBill generates and delivers all invoices simultaneously — no per-customer setup required. Supports one-time and recurring bill types.

**📊 Billing Summary Dashboard**

At a glance, see your total expected revenue, revenue already collected, and all outstanding invoices split into current (within term) and overdue (past due date).

**🔍 Bill List with Activity Log**

Every invoice is tracked with a full activity log — from `Invoice In Process` through `Invoice Sent` to `Receipt Sent`. Filter by payment status or activity state to quickly identify what needs attention.

**🧾 Invoice and Receipt Management**

Each billing cycle generates a branded invoice delivered to the customer. After payment, a receipt is issued automatically. Merchants can customize invoice templates, logo, colors, and signature through System Preference.

## How It Works

{% stepper %}
{% step %}

#### Submit or Receive Bills

Bills enter the system either from a Bulk Upload file or automatically from active subscriptions in Subscriptions
{% endstep %}

{% step %}

#### Invoices Delivered Automatically

FlexiBill generates each invoice and delivers it to the customer via Email or WhatsApp on the billing date
{% endstep %}

{% step %}

#### Monitor & Reconcile

Track payment status per bill, view activity logs, download reports, and follow up on overdue invoices from the Billing dashboard
{% endstep %}
{% endstepper %}

## What's in This Section

{% tabs %}
{% tab title="Create Bulk Subscription" %}
Upload a billing data file to generate invoices for many customers at once — without configuring individual plans or subscriptions.

**Use when:**

* You have an existing customer list managed in Excel or a spreadsheet
* You need to issue one-time bills (e.g., event fees, setup charges, ad hoc billing)
* You are onboarding recurring billing for a large customer base quickly

**Supports:**

* One-Time and Recurring bill types
* Email and/or WhatsApp delivery
* Up to 1,000 customer records per file (CSV, XLS, XLSX, max 50 MB)
* Interval or specific date billing cycles for recurring bills

👉 [Create Bulk Subscription](/subscription-and-billing/flexibill/subscription-and-billing/billing/create-bulk-subscription)
{% endtab %}

{% tab title="View List and Detail Bill" %}
The Bill list shows every invoice registered in FlexiBill — whether from a bulk upload or a subscription. From here you can:

* Monitor invoice delivery status per customer (Activity Log)
* Track payment status: Unpaid, Paid, or Overdue
* View the full billing summary: expected revenue, received, current outstanding, and overdue
* Open any bill to see member details, payment history, bill cycle configuration, and timestamped activity

👉 [View List and Detail Bill](/subscription-and-billing/flexibill/subscription-and-billing/billing/view-subscription-billing)
{% endtab %}

{% tab title="Invoice and Receipt" %}
Every active subscription and bulk upload bill automatically generates a branded invoice sent to the customer. After payment, a receipt is issued automatically.

Merchants can configure:

* Invoice layout template (4 standard templates)
* Company logo, brand name, and color scheme
* Footer text, Terms & Conditions, and signature image
* Webhook notifications for real-time payment event updates

👉 [Invoice and Receipt](/subscription-and-billing/flexibill/subscription-and-billing/invoice-and-receipt)
{% endtab %}
{% endtabs %}

## Merchant & Customer Experience

### Merchant View

* Navigate to **Subscription and Billing → Bill** to access the Billing hub
* Use **Create Bill → Upload File** to submit a bulk billing file
* Monitor all invoices in the **Bill list** — search by member name, bill identifier, or file name
* Use the **Billing Summary** at the top of the page to track revenue and outstanding invoices at a glance
* Click any bill row to open the full detail view: member data, payment details, bill cycle, and activity log

### Customer View

* Receives an invoice via **Email or WhatsApp** containing a payment link and billing details
* Clicks the link to review the invoice, select a payment method, and complete payment
* Receives a **receipt via Email** after each successful payment

## Terms & Conditions

* Bulk upload files must follow the required column format — download the template from the dashboard
* Each upload must use a unique file name; file names cannot be reused across uploads
* WhatsApp delivery requires **DOKU PayChat** to be activated
* Auto-debit on invoices requires **Account Billing** to be activated → [Activate Account Billing](/subscription-and-billing/flexibill/account-billing/account-billing-activation)

## FAQ

<details>

<summary>What is the difference between Bulk Bill Upload and using Subscriptions?</summary>

**Bulk Bill Upload** is file-driven — billing details (amount, customer, schedule) are defined per row in an uploaded file. No plan or collection configuration is required. It is best for high-volume, fast onboarding or businesses that manage data in Excel.

**Subscriptions** are plan-driven — you configure a product catalog (Collection + Plan) once, then link customers to plans. The system manages each customer's billing lifecycle independently, including renewals, upgrades, and status tracking.

Use Bulk Upload for volume and speed. Use Subscriptions for lifecycle control and product structure.

</details>

<details>

<summary>What is the difference between FlexiBill Billing and a Payment Link?</summary>

Both tools collect payments, but they serve different needs.\
\
**FlexiBill Billing** is built for recurring billing at scale — it automates invoice delivery, tracks payment status across your entire customer base, and runs billing cycles without manual effort.\
\
**Payment Link** is best for quick, one-time collections where no ongoing billing relationship is needed.\
\
See how they compare in real scenarios:

| Scenario                                                              | FlexiBill Billing                                                                         | Payment Link                                                                           |
| --------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| **Bill 50 members every 5th of the month for 12 consecutive months.** | Set once — invoices issued and delivered automatically every cycle, stops after 12 times. | Better suited for one-time or irregular billing, not repeated cycles.                  |
| **Each customer has a different billing schedule**                    | Each customer's cycle runs independently and automatically.                               | Works best when schedules are simple and volume is low.                                |
| **Service fee paid by the customer, not the merchant**                | Configurable during setup — fee is passed through automatically.                          | Not supported. The merchant absorbs the service fee on all transactions.               |
| **One-time charge outside regular billing**                           | Supported as a standalone bill alongside existing subscriptions.                          | <p>Ideal — quick to create, no setup needed.<br>But FlexiBill can cover this also.</p> |
| **Track who has paid across 200 customers**                           | Dashboard shows expected, received, and overdue in real time.                             | Suitable for low volume — easy to track manually.                                      |

</details>

<details>

<summary>Can I mix Bulk Bill Upload and Subscriptions in the same account?</summary>

Yes. Both coexist in the same account and all resulting invoices are visible together in the Bill list. There is no conflict between the two approaches — use whichever is appropriate for each segment of your customers.

</details>

<details>

<summary>What is the difference between interval billing and specific date billing?</summary>

**Interval billing** schedules the next invoice a fixed number of days or months after the previous billing date — anchored to the customer's start date. For example, a customer who starts on January 15 with a monthly cycle is billed on February 15, March 15, and so on.

**Specific date billing** issues invoices on a fixed calendar date each month, regardless of when the customer started. For example, all customers on a "5th of the month" cycle are billed on the 5th — whether they joined on the 1st or the 28th.

Use interval billing for per-customer anniversary billing. Use specific date billing when your business runs batch billing on a fixed calendar date for all customers.

</details>

<details>

<summary>How do I know if an invoice was successfully delivered to the customer?</summary>

Check the **Activity Log** column in the Bill list. An invoice that has been successfully sent will show **Invoice Sent** status. If delivery failed (e.g., due to insufficient deposit balance), the status shows **Invoice Error** — top up your deposit and the system retries automatically.

</details>

<details>

<summary>Can I customize what the invoice looks like?</summary>

Yes. Navigate to **Subscription and Billing → System Preference → Template Preference** to configure the invoice layout (4 templates available), upload a company logo, set brand colors, add a footer message, Terms & Conditions, and an authorized signature image.

</details>

<details>

<summary>Can I change a recurring bill to a one-off charge after it has been created?</summary>

No. The bill type is set at the time of creation and cannot be changed after the invoice is issued. If you need to switch a customer from recurring to a one-off charge, stop or cancel the recurring bill and create a new one-off charge bill for the specific amount.

</details>

<details>

<summary>Can a customer have both a recurring bill and a one-off charge at the same time?</summary>

Yes. A customer can have multiple active bills of different types simultaneously. For example, a student can have a recurring monthly tuition bill running alongside a one-off study tour fee bill. Both appear in the Bill list and are tracked independently.

</details>


# Create Bulk Subscription

{% hint style="info" %}
This page is a tutorial for the **Billing — Bulk Bill Upload** feature. For a full feature overview → [Subscription and Billing](/subscription-and-billing/flexibill/subscription-and-billing)
{% endhint %}

Learn how to process hundreds of invoices at once using the Bulk Bill Upload feature. Upload a single file containing your entire customer billing data — FlexiBill will automatically issue and deliver all invoices.

## Interactive Demo

{% @supademo/embed demoId="cml7prxe702pf2c0im2qxh3a1" url="<https://app.supademo.com/demo/cml7prxe702pf2c0im2qxh3a1>" %}

## Prerequisites

* [ ] FlexiBill is activated
* [ ] Customer billing data is prepared in CSV, XLS, or XLSX format
* [ ] If using WhatsApp delivery: DOKU PayChat is activated

## Step-by-Step Guide

{% stepper %}
{% step %}

### Choose Bill Type and Distribution Channel

Navigate to **Subscription and Billing → Bill**, then click **Create Bill → Upload File**.

<figure><img src="/files/9zejwa0Lm7JZtflNc9dn" alt=""><figcaption></figcaption></figure>

**Select the bill type:**

<table><thead><tr><th width="159.08203125">Type</th><th>Description</th><th>Use when</th></tr></thead><tbody><tr><td><strong>One-Off Charge</strong></td><td>A single, non-recurring invoice</td><td>Registration fees, event fees, ad hoc charges</td></tr><tr><td><strong>Recurring</strong></td><td>Invoices issued automatically on a repeating schedule</td><td>Monthly tuition, rent, memberships</td></tr></tbody></table>

**Select the distribution channel** — both can be selected simultaneously:

<table><thead><tr><th width="135.24609375">Channel</th><th>Requirement</th></tr></thead><tbody><tr><td><strong>Email</strong></td><td>Invoice delivered to the customer's email address in the data file</td></tr><tr><td><strong>WhatsApp</strong></td><td>Invoice delivered to the customer's WhatsApp number in the data file. Requires DOKU PayChat to be activated</td></tr></tbody></table>
{% endstep %}

{% step %}

### Select Invoice Term and Grace Period

Configure the payment window and buffer period for all invoices in this upload.

**Invoice Term** — the deadline from the invoice issue date by which the customer must pay:

<table><thead><tr><th width="180.41015625">Option</th><th>Due Date</th></tr></thead><tbody><tr><td><strong>Due upon receipt</strong></td><td>Same day the invoice is issued</td></tr><tr><td><strong>15 days</strong></td><td>15 days after invoice is issued</td></tr><tr><td><strong>End of month</strong></td><td>Last day of the month the invoice is issued</td></tr></tbody></table>

**Grace Period** — a buffer after the due date where no penalties apply, the customer can still pay, and the service remains active:

<table><thead><tr><th width="192.29296875">Option</th><th>Effect</th></tr></thead><tbody><tr><td><strong>No grace period</strong></td><td>Subscription expires immediately after the due date if unpaid</td></tr><tr><td><strong>7 days</strong></td><td>Customer has 7 additional days after the due date to pay</td></tr><tr><td><strong>15 days</strong></td><td>Customer has 15 additional days after the due date to pay</td></tr></tbody></table>

{% hint style="info" %}
Invoice Term and Grace Period apply uniformly to all records in the uploaded file. If different customers require different terms, submit them in separate uploads.
{% endhint %}
{% endstep %}

{% step %}

### Prepare the Billing File

**Accepted formats:** CSV, XLS, XLSX | **Maximum file size:** 50 MB | **Maximum rows:** 1,000

{% hint style="info" %}
Download the template from the dashboard (**Download Template**) to avoid formatting errors. Templates are available for both **One-Off Charge Bill** and **Recurring Bill** types.
{% endhint %}

**File naming rules:**

* Use only: letters (a–z, A–Z), numbers (0–9), hyphens (`-`), and underscores (`_`)
* No spaces or special characters
* Length: 3–100 characters, must start with a letter or number
* **Each upload must use a unique file name** — file names cannot be reused across uploads

***

**Required columns — One-Off Charge Bill:**

<table><thead><tr><th width="128.8828125">Column</th><th width="107.2421875">Required</th><th width="83.47265625">Max Char</th><th>Description</th><th>Example</th></tr></thead><tbody><tr><td><code>beneficiary_name</code></td><td>✅</td><td>128</td><td>Customer name. No symbols except spaces and <code>'</code></td><td><code>John Smith</code></td></tr><tr><td><code>beneficiary_email</code></td><td>✅</td><td>256</td><td>Customer email address</td><td><code>john@email.com</code></td></tr><tr><td><code>beneficiary_phone</code></td><td>✅</td><td>128</td><td>Phone with country code. Indonesia: <code>62</code>, Malaysia: <code>60</code>. Do not start with <code>0</code></td><td><code>6281234567890</code></td></tr><tr><td><code>beneficiary_identifier</code></td><td>✅</td><td>20</td><td>Unique customer reference ID</td><td><code>STU-122333</code></td></tr><tr><td><code>bill_identifier</code></td><td>Optional</td><td>20</td><td>Unique bill reference ID</td><td><code>BILL-001</code></td></tr><tr><td><code>bill_service_title</code></td><td>✅</td><td>256</td><td>Name of the billed service</td><td><code>April Tuition Fee</code></td></tr><tr><td><code>bill_service_description</code></td><td>Optional</td><td>256</td><td>Additional description</td><td><code>April 2025 Class 3A</code></td></tr><tr><td><code>bill_detail</code></td><td>Optional</td><td>2,056</td><td>Custom key-value data in <code>parameter=value</code> format, separated by <code>;</code>. Maximum 10 pairs</td><td><code>student_id=122333;class=3A</code></td></tr><tr><td><code>currency</code></td><td>✅</td><td>3</td><td>Currency code</td><td><code>IDR</code> or <code>MYR</code></td></tr><tr><td><code>amount</code></td><td>✅</td><td>12</td><td>Bill amount</td><td><code>500000</code></td></tr></tbody></table>

***

**Additional columns — Recurring Bill only:**

<table><thead><tr><th width="133.4453125">Column</th><th width="158.56640625">Required</th><th>Description</th><th>Example</th></tr></thead><tbody><tr><td><code>cycle_type</code></td><td>✅</td><td><code>INTERVAL</code> or <code>SPECIFIC_DATE</code></td><td><code>INTERVAL</code></td></tr><tr><td><code>interval</code></td><td>If INTERVAL</td><td>Number + period unit: <code>d</code>=day, <code>m</code>=month, <code>y</code>=year. Range: 1–999</td><td><code>1m</code>, <code>7d</code>, <code>1y</code></td></tr><tr><td><code>date</code></td><td>If SPECIFIC_DATE</td><td>Billing day(s) of the month, separated by <code>;</code></td><td><code>1;15</code></td></tr><tr><td><code>month</code></td><td>If SPECIFIC_DATE</td><td>Billing month(s), separated by <code>;</code></td><td><code>jan;apr;jul;oct</code></td></tr><tr><td><code>start_date</code></td><td>✅</td><td>Start date in <code>YYYYMMDD</code>. Must be on or after the upload date</td><td><code>20250901</code></td></tr><tr><td><code>end_date_type</code></td><td>✅</td><td><code>AFTER_X_TIMES</code>, <code>SPECIFIC_DATE</code>, or <code>NEVER</code></td><td><code>AFTER_X_TIMES</code></td></tr><tr><td><code>end_date</code></td><td>If not NEVER</td><td>For <code>AFTER_X_TIMES</code>: number of cycles. For <code>SPECIFIC_DATE</code>: date in <code>YYYYMMDD</code>, must be after start date</td><td><code>12</code> or <code>20261231</code></td></tr></tbody></table>

***

**📋 Sample: Billing File for Rachma**

The school needs to bill student Rachma (class 3B, student ID 122333) for two separate charges:

* **Bill 1** — A one-off study tour fee of IDR 300,000
* **Bill 2** — A monthly extracurricular fee of IDR 50,000, billed every month for one year (12 cycles)

Since the two bills have different types, they must be submitted as **two separate uploads** — one for the One-Off Charge and one for the Recurring Bill.

**Upload 1 — One-Off Charge Bill (Study Tour Fee)**

File name: `rachma-study-tour-2025`

| beneficiary\_name | beneficiary\_email | beneficiary\_phone | beneficiary\_identifier | bill\_identifier | bill\_service\_title | bill\_service\_description | bill\_detail                | currency | amount |
| ----------------- | ------------------ | ------------------ | ----------------------- | ---------------- | -------------------- | -------------------------- | --------------------------- | -------- | ------ |
| Rachma            | <rachma@email.com> | 6281234567890      | 122333                  | BILL-TOUR-001    | Study Tour Fee       | Study Tour November 2025   | student\_id=122333;class=3B | IDR      | 300000 |

**Upload 2 — Recurring Bill (Monthly Extracurricular Fee)**

File name: `rachma-extracurricular-2025`

| beneficiary\_name | beneficiary\_email | beneficiary\_phone | beneficiary\_identifier | bill\_identifier | bill\_service\_title | bill\_service\_description        | bill\_detail                | currency | amount | cycle\_type | interval | start\_date | end\_date\_type | end\_date |
| ----------------- | ------------------ | ------------------ | ----------------------- | ---------------- | -------------------- | --------------------------------- | --------------------------- | -------- | ------ | ----------- | -------- | ----------- | --------------- | --------- |
| Rachma            | <rachma@email.com> | 6281234567890      | 122333                  | BILL-EXCUL-001   | Extracurricular Fee  | Monthly Extracurricular 2025–2026 | student\_id=122333;class=3B | IDR      | 50000  | INTERVAL    | 1m       | 20250901    | AFTER\_X\_TIMES | 12        |

**What this configuration does:**

* `cycle_type` = `INTERVAL` with `interval` = `1m` — invoice is issued once a month from the start date
* `start_date` = `20250901` — first invoice issued on 1 September 2025
* `end_date_type` = `AFTER_X_TIMES` with `end_date` = `12` — billing automatically stops after 12 invoices, covering the full academic year

{% hint style="info" %}
Notice that `beneficiary_identifier` (`122333`) is the same across both bills. This is Rachma's student ID used as a reference — it links both billing records to the same student in your records, even though they are in separate files.
{% endhint %}

***

{% hint style="warning" %}
**Before uploading, check the following — these are the most common causes of file rejection:**

**Phone numbers** Use the international format with country code — Indonesia: `628xxx`, Malaysia: `60xxx`. Never start with `0`. Numbers must be numeric only, no spaces or dashes.

**Commas in values** Avoid commas (`,`) in any column. In CSV format, commas are treated as column separators and will split your data into the wrong columns. Use semicolons (`;`) only inside `bill_detail`.

**Excel formulas** Do not leave formula cells in the file. If you used formulas to calculate values, copy the entire sheet and paste as values only (`Paste Special → Values`) before saving.

**`bill_detail` format** Every entry must follow `parameter=value` format. Separate multiple pairs with `;`. Maximum 10 pairs per row. Example: `student_id=122333;class=3A;month=April`.

**Amounts** Enter plain numeric values only — no currency symbols, dots as thousand separators, or spaces. Correct: `500000`. Incorrect: `Rp 500.000`.

**Dates (Recurring only)** All dates must follow `YYYYMMDD` format. `start_date` must be today or a future date. `end_date` must be after `start_date`.

**Interval format (Recurring only)** Valid units are `d` (day), `m` (month), and `y` (year) only. No other units are accepted. Number must be between 1 and 999. Example: `7d`, `1m`, `1y`.
{% endhint %}
{% endstep %}

{% step %}

### Upload the File

Drag and drop your billing file into the upload area, or click **Select from your computer**.

<figure><img src="/files/79HC5h1i9Z3sLaYCzoH7" alt=""><figcaption></figcaption></figure>

The system validates the file immediately upon upload. If errors are found, an **Error List** is displayed showing the error reason, row number, and column for each issue:

<figure><img src="/files/lCQKeQ9625RPzlO8gOSD" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/KNzZehmOWIcSZ5CiDh05" alt=""><figcaption></figcaption></figure>

Fix the errors and click **Re-upload File** to resubmit.

**Validation error reference:**

The following errors are the most commonly encountered when uploading a billing file. Errors are shown in the Error List with the affected row and column.

**File-Level Errors** — The entire file is rejected before any rows are processed.

| Error                     | Cause                                               | Resolution                                                       |
| ------------------------- | --------------------------------------------------- | ---------------------------------------------------------------- |
| File format not supported | File is not CSV, XLS, or XLSX                       | Convert and re-save in a supported format                        |
| File size exceeds limit   | File is larger than 50 MB                           | Remove unnecessary columns or rows, or split into multiple files |
| Row count exceeds limit   | File contains more than 1,000 data rows             | Split into multiple files of ≤1,000 rows each                    |
| Duplicate file name       | A file with the same name has already been uploaded | Rename the file — e.g., append a date or batch number            |
| File is empty             | The file contains no data rows                      | Add billing records to the file                                  |

**Column & Format Errors** — Specific rows or columns fail validation.

| Error                         | Affected Column(s)                                                  | Cause                                                                | Resolution                                                                     |
| ----------------------------- | ------------------------------------------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Required data is empty        | Any mandatory column                                                | A required field is blank in one or more rows                        | Fill in all mandatory fields — see column reference above                      |
| Value exceeds character limit | `beneficiary_name`, `bill_service_title`, `bill_identifier`, others | Value is longer than the column's maximum character length           | Shorten the value to fit within the limit                                      |
| Invalid character in value    | Any column                                                          | Value contains a comma (`,`), which is treated as a column separator | Remove commas from all values; use semicolons (`;`) only in `bill_detail`      |
| Value comply safe string      | `beneficiary_name`, `bill_detail`, others                           | Value contains a disallowed symbol or special character              | Remove symbols not permitted for that column — names allow only spaces and `'` |
| Formula detected              | Any column                                                          | Cell contains an Excel or Sheets formula instead of a plain value    | Copy the cells and paste as values only (`Paste Special → Values`)             |

**Data Integrity Errors** — Values are in the correct format but fail business logic validation.

| Error                        | Affected Column(s)  | Cause                                                                   | Resolution                                                            |
| ---------------------------- | ------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------- |
| Invalid phone number format  | `beneficiary_phone` | Phone number starts with `0` or contains non-numeric characters         | Use the international format — Indonesia: `628xxx`, Malaysia: `60xxx` |
| Invalid currency code        | `currency`          | Currency code is not a recognized 3-letter ISO code                     | Use `IDR` for Indonesian Rupiah or `MYR` for Malaysian Ringgit        |
| Amount is not a valid number | `amount`            | Amount contains a currency symbol, comma, or space (e.g., `Rp 500.000`) | Use plain numeric value only — e.g., `500000`                         |
| Amount is zero or negative   | `amount`            | Amount value is `0` or below                                            | Enter a positive amount greater than zero                             |

**Recurring Bill Errors** — Apply only to recurring bill uploads.

| Error                   | Affected Column(s) | Cause                                                                                                                    | Resolution                                                                                                      |
| ----------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- |
| Invalid start date      | `start_date`       | Start date is before the upload date, or not in `YYYYMMDD` format                                                        | Use `YYYYMMDD` format; start date must be today or a future date                                                |
| Invalid end date        | `end_date`         | End date is before or equal to the start date, or not in `YYYYMMDD` format                                               | End date must be after the start date in `YYYYMMDD` format                                                      |
| Missing interval value  | `interval`         | `cycle_type` is `INTERVAL` but `interval` column is empty                                                                | Fill in the interval — e.g., `7d` for every 7 days, `1m` for monthly                                            |
| Invalid interval format | `interval`         | Interval does not follow the `[number][unit]` format, unit is not `d`, `m`, or `y`, or number is outside the 1–999 range | Use format: `1d`, `30d`, `1m`, `1y` — number must be between 1 and 999                                          |
| Missing date value      | `date`             | `cycle_type` is `SPECIFIC_DATE` but `date` column is empty                                                               | Enter the billing day(s) of the month — e.g., `5` or `1;15`                                                     |
| Invalid end date type   | `end_date_type`    | Value is not one of the accepted enum values                                                                             | Use exactly: `AFTER_X_TIMES`, `SPECIFIC_DATE`, or `NEVER`                                                       |
| Missing end date value  | `end_date`         | `end_date_type` is `AFTER_X_TIMES` or `SPECIFIC_DATE` but `end_date` is empty                                            | For `AFTER_X_TIMES`: enter the number of cycles (e.g., `12`). For `SPECIFIC_DATE`: enter the date in `YYYYMMDD` |

**bill\_detail Errors** — Apply only when the optional `bill_detail` column is used.

| Error                   | Cause                                                              | Resolution                                                                    |
| ----------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------------- |
| Missing `=` separator   | An entry does not follow the `parameter=value` format              | Ensure every entry contains exactly one `=` sign — e.g., `class=3A`           |
| Exceeds 10 pairs        | More than 10 key-value pairs are separated by `;` in a single cell | Reduce to a maximum of 10 pairs per row                                       |
| Contains comma in value | A value within a `parameter=value` pair contains a comma           | Replace commas within values with a different separator or rephrase the value |
| {% endstep %}           |                                                                    |                                                                               |

{% step %}

### Configure Invoice Settings

**1. Invoice Preferences**

Click **Manage invoice preferences** to customize how invoices appear to your customers:

<table><thead><tr><th width="132.859375">Setting</th><th>Description</th></tr></thead><tbody><tr><td><strong>Logo</strong></td><td>Upload your company logo — appears on all invoices and receipts</td></tr><tr><td><strong>Template</strong></td><td>Select from available invoice layout templates</td></tr><tr><td><strong>Fee Payer</strong></td><td>Configure whether the payment service fee is absorbed by the merchant or passed through to the customer</td></tr></tbody></table>

<figure><img src="/files/oFQM4V6LsjxYu7ox94mg" alt=""><figcaption></figcaption></figure>

**2. WhatsApp Distribution Setup** *(only if WhatsApp is selected as distribution channel)*

* Ensure **DOKU PayChat** is active with a registered WhatsApp Business Account
* Select the **PayChat Invoice Template** and **PayChat Receipt Template**

<figure><img src="/files/GdsamGNerw2gGaM7wPiU" alt=""><figcaption></figcaption></figure>

* Map each template variable to its corresponding billing data field (e.g., `{{1}}` → `beneficiary_name`, `{{2}}` → `bill_service_title`)

<figure><img src="/files/KndThCHal2dcVUrpEi2s" alt=""><figcaption></figcaption></figure>

* Preview the WhatsApp message to verify the content before submitting
  {% endstep %}

{% step %}

### Submit

Click the red **Create Bill** button to submit.

FlexiBill processes the file and begins issuing invoices. Processing time varies by file size — for large files, allow a few minutes before checking results.

To monitor the status of each invoice, navigate to **Subscription and Billing → Bill** and refresh the page. Each record will show its current **Activity Log** state — from `Invoice In Process` through to `Invoice Sent`.

👉 [View Subscription Billing](/subscription-and-billing/flexibill/subscription-and-billing/billing/view-subscription-billing) for full monitoring instructions.
{% endstep %}
{% endstepper %}

## What's Next

* 👉 [View Subscription Billing](/subscription-and-billing/flexibill/subscription-and-billing/billing/view-subscription-billing) — Monitor invoice delivery and payment status per customer
* 👉 [Invoice and Receipt](/subscription-and-billing/flexibill/subscription-and-billing/invoice-and-receipt) — Learn how customers receive, pay, and get receipts
* 👉 [Host-to-Host Integration](/subscription-and-billing/flexibill/subscription-and-billing/host-to-host-integration) — Automate bill creation programmatically via API

## FAQ

<details>

<summary>How do customers pay their bills?</summary>

Customers receive an invoice via Email or WhatsApp containing a unique payment link. They click the link, review the invoice details, and select an available payment method to complete the transaction. Payment methods available depend on your DOKU account configuration.

</details>

<details>

<summary>Is the payment link the same for every billing cycle?</summary>

No. Each billing cycle generates a completely unique payment link. A link from a previous cycle cannot be used to pay the current bill.

</details>

<details>

<summary>Can I reuse the same file name for a different billing upload?</summary>

No. Every upload must use a unique file name. If you attempt to upload a file with a name that has been used before, the system will reject it. Add a date or batch number to the file name to keep them unique (e.g., `tuition-jan-2026`, `tuition-feb-2026`).

</details>

<details>

<summary>Can I upload multiple files in one session?</summary>

Each file must be uploaded as a separate Create Bill action. There is no batch submission of multiple files in a single session. Each upload generates its own set of invoices and is tracked independently in the Bill list.

</details>

<details>

<summary>What happens if only some rows in my file have errors?</summary>

The entire file is rejected if any row fails validation — FlexiBill does not process partial files. The Error List will show every row and column that contains an issue. Fix all errors in the file and re-upload the complete corrected file.

</details>

<details>

<summary>How do I fill in the bill_detail column?</summary>

`bill_detail` is optional. If used, each entry must follow the `parameter=value` format, with multiple pairs separated by `;`. Maximum 10 pairs per record.

Example: `student_id=122333;class=3A;month=April`

Do not use commas anywhere in this column — commas are treated as column separators and will cause a validation error.

</details>

<details>

<summary>Can I apply different invoice terms to different customers in the same file?</summary>

No. The Invoice Term and Grace Period selected during upload apply uniformly to all records in the file. If different customers require different payment terms, submit them as separate uploads — one per term configuration.

</details>

<details>

<summary>What happens after I submit — how do I know if invoices were sent?</summary>

After submission, each bill record is processed individually. Navigate to **Subscription and Billing → Bill** and check the **Activity Log** column:

* `Invoice In Process` — system is generating the invoice
* `Invoice Sent` — invoice successfully delivered to the customer
* `Invoice Error` — delivery failed, typically due to insufficient deposit balance

If you see `Invoice Error`, top up your deposit balance and the system will automatically retry delivery.

</details>

<details>

<summary>Is there an automatic reminder before the due date?</summary>

FlexiBill currently delivers invoices at the scheduled billing time. Due date reminder notifications — sent to customers before the payment deadline — are planned for a future release.

</details>


# WhatsApp Portal for Subscription

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only
{% endhint %}

**WhatsApp Subscription** is a PayChat feature that enables merchants to collect recurring payments directly through WhatsApp. It combines two systems working together:

* **Accept Order** acts as the **registration portal** — customers discover the subscription, select a plan, and sign up entirely within WhatsApp.
* **FlexiBill Bill Collection** powers the **recurring billing engine** — once a customer registers, FlexiBill automatically generates and delivers a bill on every cycle based on the frequency you set.

This means merchants only need to set up one event. Everything after the first registration — billing, notifications, and payment tracking — is handled automatically.

{% hint style="info" %}
WhatsApp Subscription is built on top of Accept Order and FlexiBill. Accept Order must be activated in your DOKU Dashboard before you can create a Subscription event. Refer to [Activate Accept Order](broken://pages/777b80ea7f7f36e3f09fb3cec1dd8a2f5d0e45b2) if you have not done this yet.
{% endhint %}

## How the System Works Together

WhatsApp Subscription connects two DOKU products into a single seamless flow:

<table><thead><tr><th width="124.390625">Layer</th><th width="112.69921875">System</th><th>Role</th></tr></thead><tbody><tr><td>Registration</td><td>Accept Order (PayChat)</td><td>Serves as the customer-facing portal. Customers chat with the bot, select a subscription plan, and submit their registration — all inside WhatsApp. Name, phone, and email are auto-filled from their WhatsApp profile.</td></tr><tr><td>Recurring Billing</td><td>FlexiBill — Generate Bill</td><td>Once a customer successfully registers, FlexiBill's Generate Bill API is triggered automatically. It handles all subsequent billing cycles — creating, scheduling, and delivering bills via WhatsApp and/or email on every due date.</td></tr></tbody></table>

{% hint style="info" %}
**Under the hood:** When a customer completes registration through Accept Order, the system internally calls FlexiBill's **Generate Bill** API with `bill_type: "RECURRING"`. This creates the recurring billing schedule that runs for the duration of the subscription. Merchants do not need to call this API manually — it is triggered automatically upon successful registration.
{% endhint %}

## Features and Benefits

#### 🔁 **Automated Recurring Billing**

Once a customer registers, FlexiBill automatically generates and sends a bill on every billing cycle. No manual action is needed from the merchant.

#### 📋 **Pre-filled Customer Data**

Customer identity fields (Name, Phone Number, Email) are automatically populated from the customer's WhatsApp profile during registration — no additional forms required.

#### 🛍️ **Product-Based Subscription Plans**

Merchants define the available subscription tiers (e.g., Basic, Premium, VIP) via Price Reference in Accept Order. Customers choose their plan during the WhatsApp chat.

#### ⚡ **End-to-End WhatsApp Experience**

Customers register, select a plan, pay, and receive every subsequent billing notification — all without leaving WhatsApp.

#### 📊 **Dual Dashboard Monitoring**

Registration activity is visible in the **Accept Order transaction list**. Recurring billing and payment status are tracked separately in **FlexiBill Bill Collection**. See [Dashboard & Monitoring](/subscription-and-billing/flexibill/subscription-and-billing/billing/whatsapp-portal-for-subscription/dashboard-and-monitoring) for details.

#### 💸 **Flexible Fee Management**

Additional service fees can be passed to the customer or absorbed by the merchant, configurable per event.

#### 🔒 **Reduced Fraud Risk**

Payment is tied to a verified WhatsApp identity and confirmed customer registration, significantly reducing fraudulent orders.

## Customer Journey

A step-by-step view of what happens from event creation to recurring billing:

{% stepper %}
{% step %}

### Merchant Creates Event

Merchant sets up a Subscription event in Accept Order: event name, subscription plans, billing frequency, and language.

No custom field setup needed — Name, Phone, Email are pre-filled automatically.
{% endstep %}

{% step %}

### Customer Registers

Customer scans the QR code or taps the event link.

The WhatsApp bot guides them through plan selection. Their identity data is captured automatically from their WhatsApp profile.
{% endstep %}

{% step %}

### First Payment

The customer confirms their selection and completes the first payment through the DOKU payment link sent via WhatsApp.
{% endstep %}

{% step %}

### Recurring Billing

FlexiBill takes over. On each billing date, a new bill is automatically generated and delivered to the customer via WhatsApp. The merchant monitors all activity from the dashboard.
{% endstep %}
{% endstepper %}

## WhatsApp Subscription vs. Standard Accept Order

<table><thead><tr><th width="212.15234375">Aspect</th><th width="237.109375">Standard Accept Order</th><th>WhatsApp Subscription</th></tr></thead><tbody><tr><td><strong>Payment frequency</strong></td><td>One-time per event</td><td>Recurring (daily / weekly / monthly / quarterly / annually)</td></tr><tr><td><strong>Billing engine</strong></td><td>Accept Order only</td><td>Accept Order (registration) + FlexiBill (recurring billing)</td></tr><tr><td><strong>Custom field setup</strong></td><td>Merchant configures manually</td><td>Name, Phone, Email auto-filled from WhatsApp</td></tr><tr><td><strong>Customer identification</strong></td><td>Customer manually enters details</td><td>Pulled directly from WhatsApp profile</td></tr><tr><td><strong>Billing trigger</strong></td><td>Customer initiates each time</td><td>Automatic on every cycle via FlexiBill</td></tr><tr><td><strong>Monitoring</strong></td><td>Accept Order transaction list</td><td>Accept Order (registration) + FlexiBill Bill Collection (payments)</td></tr><tr><td><strong>Use case</strong></td><td>Flash sales, one-off orders, events</td><td>Memberships, subscriptions, recurring services</td></tr></tbody></table>

## Use Cases

{% tabs %}
{% tab title="Gym & Fitness" %}
**Description**\
A gym wants to automate its monthly membership billing instead of manually chasing customers each month.

**Solution**\
Create a Subscription event with three price tiers (Basic, Premium, VIP) and set billing frequency to Monthly. Publish the QR code at the front desk or share the link on social media.

**How**\
Members scan the code, select their membership tier in WhatsApp, and their identity is captured automatically. After the first payment, FlexiBill takes over — sending a billing notification every 30 days without any action from the gym.

**Features Used**

* Price Reference for membership tiers
* Monthly billing frequency
* Auto-filled customer fields
  {% endtab %}

{% tab title="Online Course" %}
**Description**\
An online education provider offers weekly tutorial sessions at different price points per subject.

**Solution**\
Use a Subscription event with Weekly billing and Price Reference per course tier. Students subscribe via WhatsApp and are billed automatically every 7 days.

**How**\
Students tap the event link, select their course plan, and complete the first payment. FlexiBill then sends billing notifications every week — no manual reminders needed.

**Features Used**

* Price Reference for course tiers
* Weekly billing frequency
* Auto-filled customer fields
  {% endtab %}

{% tab title="Cooperative Savings" %}
**Description**\
A savings cooperative needs to collect fixed monthly contributions from members without manual follow-up.

**Solution**\
Members subscribe to a savings plan directly from WhatsApp. FlexiBill handles monthly billing automatically.

**How**\
Members scan the QR code, confirm their savings plan, and complete the first contribution. Each subsequent month, a bill is sent via WhatsApp automatically.

**Features Used**

* Price Reference for savings plan tiers
* Monthly billing frequency
* Auto-filled customer fields
  {% endtab %}
  {% endtabs %}

## FAQ

<details>

<summary>Is WhatsApp Subscription a separate product from Accept Order?</summary>

No. WhatsApp Subscription is an event type within Accept Order, combined with FlexiBill for recurring billing. You create and manage it through the same Accept Order form in your DOKU Dashboard, with the Event Type set to Subscription.

</details>

<details>

<summary>Do I need to integrate with FlexiBill myself?</summary>

No. The FlexiBill Generate Bill API is triggered automatically when a customer completes registration through the WhatsApp Subscription event. Merchants do not need to build or manage this integration manually.

</details>

<details>

<summary>What happens to the custom fields when I select the Subscription event type?</summary>

The system automatically pre-fills Name, Phone Number, and Email using the customer's WhatsApp account data. You do not need to configure these fields manually.

</details>

<details>

<summary>Can customers choose their own billing frequency?</summary>

No. The billing frequency is set by the merchant at the event level. Customers see the frequency during the chat before confirming their subscription.

</details>

<details>

<summary>Can I offer multiple subscription plans within a single event?</summary>

Yes. Use Price Reference to define up to 10 plan tiers within one event. Each tier has its own title, description, and amount.

</details>

<details>

<summary>Where do I monitor registrations vs. payments?</summary>

Registrations are visible in the Accept Order transaction list. Recurring billing and payment status are tracked in FlexiBill Bill Collection. See [Dashboard & Monitoring](/subscription-and-billing/flexibill/subscription-and-billing/billing/whatsapp-portal-for-subscription/dashboard-and-monitoring) for the full breakdown.

</details>

<details>

<summary>Do customers need to install anything?</summary>

No. Customers only need WhatsApp. The entire registration and recurring payment flow happens inside WhatsApp.

</details>


# How to Create Event

{% hint style="info" %}
Before creating a Subscription event, make sure Accept Order is already activated in your DOKU Dashboard. If not, complete [Activate Accept Order](broken://pages/777b80ea7f7f36e3f09fb3cec1dd8a2f5d0e45b2) first.
{% endhint %}

Creating a WhatsApp Subscription event uses the same Accept Order event form, with **Event Type** set to **Subscription**. The form has three steps:

* **Event Information** — basic details about the subscription.
* **Event Configuration** — pricing, billing frequency, and other settings.
* **Custom Field Data** — auto-completed when Subscription is selected.

## Step 1 - Event Information

{% stepper %}
{% step %}

### Open the Event Creation Form

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/).
2. Navigate to **PayChat** > **Accept Order** from the left sidebar.
3. Click **+ Create Event** in the top-right corner.

The **Buat Event** (Create Event) modal will appear.
{% endstep %}

{% step %}

### Fill in Event Information

#### Event Name

The name of your subscription plan. This is shown to customers inside the WhatsApp chat and displayed in your dashboard event list.

* Allowed characters: Alphanumeric
* Maximum: 200 characters
* **Mandatory**

#### Image *(Optional)*

A banner image shown in the greeting message sent to customers.

* Allowed formats: PNG, JPG, JPEG
* Maximum file size: 1 MB

#### Description

A short description of what the subscription includes. Customers see this during the chat flow.

* Allowed characters: Alphanumeric, safe string, and emoji
* Maximum: 700 characters
* **Mandatory**

#### T\&C URL *(Optional)*

A link to your Terms & Conditions page. Customers can access this before confirming their subscription.
{% endstep %}
{% endstepper %}

## Step 2 - Event Configuration

{% stepper %}
{% step %}

### Event Type

Set **Event Type** to **Subscription**.

{% hint style="success" %}
Selecting **Subscription** as the Event Type automatically pre-configures the Custom Field Data in Step 3 with **Name**, **Phone Number**, and **Email** — pulled from the customer's WhatsApp profile. No manual setup is needed for these fields.
{% endhint %}
{% endstep %}

{% step %}

### Price Option

Define the subscription plans available to customers. For Subscription events, use **Price Reference** to create named tiers.

{% tabs %}
{% tab title="Price Reference (Recommended)" %}
Price Reference lets you predefine up to **10 subscription plan options**. Each option has its own title, description, and price — customers pick the one they want during the WhatsApp chat.

#### How to configure

1. Under **Price Option**, set the option to **Customer**.
2. Check **Price Reference**.
3. Click **+ Add Option** and fill in the fields for each plan:

| Field             | Description                                                                                                                                                                                                                                                 | Required      |
| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- |
| Code              | Internal identifier for this plan (e.g., `BASIC01`, `VIP01`). Used for reconciliation.                                                                                                                                                                      | Optional      |
| Title             | The plan name shown to customers (e.g., Basic Plan, Premium Package).                                                                                                                                                                                       | **Mandatory** |
| Description       | What this plan includes (e.g., 5 sessions per month, unlimited access).                                                                                                                                                                                     | **Mandatory** |
| Billing Frequency | <p>Set how often customers are billed. The merchant controls this at the event level — customers are shown the frequency before they confirm their subscription. The frequency are:<br>1. Daily<br>2. Weekly<br>3. Monthly<br>4. Quarterly<br>5. Yearly</p> | Mandatory     |
| Amount            | The amount billed per cycle for this plan.                                                                                                                                                                                                                  | **Mandatory** |

4. Repeat for each plan tier.
5. Click **Set Option** when finished.

#### ✅ Examples

| Plan Title    | Description                                      |         | Amount     |
| ------------- | ------------------------------------------------ | ------- | ---------- |
| Basic Plan    | Access to standard classes, 4x/month.            | Daily   | Rp 150,000 |
| Premium Plan  | Unlimited class access + locker.                 | Montly  | Rp 250,000 |
| VIP Plan      | All Premium benefits + personal trainer session. | Monthly | Rp 450,000 |
| {% endtab %}  |                                                  |         |            |
| {% endtabs %} |                                                  |         |            |
| {% endstep %} |                                                  |         |            |

{% step %}

### Language Preference

Choose the language for all customer-facing WhatsApp messages: greetings, plan selection prompts, confirmations, and billing notifications.

{% tabs %}
{% tab title="English" %}
All WhatsApp communications are delivered in English.
{% endtab %}

{% tab title="Bahasa Indonesia" %}
All WhatsApp communications are delivered in Bahasa Indonesia.
{% endtab %}
{% endtabs %}
{% endstep %}
{% endstepper %}

## Step 3 - Custom Field Data

{% stepper %}
{% step %}

### Custom Field Data

{% hint style="success" %}
When **Subscription** is selected as the Event Type, this step is **automatically completed**. The system pre-fills three mandatory fields:

* **Name** — from the customer's WhatsApp display name.
* **Phone Number** — the customer's WhatsApp number, used for all billing notifications.
* **Email** — collected from the WhatsApp profile for receipts and confirmations.

No manual configuration is required for these fields.
{% endhint %}

If your business needs additional information beyond these three, you can add up to **7 more custom fields** (10 total). Use **Input Form** or **Reply Button** field types.
{% endstep %}

{% step %}

### Publish the Event

1. Review all configurations.
2. Click **Buat Event** (Create Event) to publish.
3. Once published, you will receive:
   * A **QR Code** — share at your physical location or on printed materials.
   * An **Event Link** — share digitally (social media, email, WhatsApp broadcast).

Customers who scan the QR code or tap the link will be directed into the WhatsApp subscription chat flow automatically.
{% endstep %}
{% endstepper %}

## What Happens After a Customer Registers

Once a customer completes registration and first payment through the WhatsApp chat:

1. The registration is recorded in the **Accept Order transaction list** in your dashboard.
2. The system automatically triggers **FlexiBill Generate Bill** with `bill_type: "RECURRING"`, creating the billing schedule for all future cycles.
3. On each billing date, FlexiBill sends a new bill to the customer via WhatsApp (and email, if configured).
4. Payment status for recurring bills is tracked in **FlexiBill Bill Collection**.

{% hint style="info" %}
You do not need to do anything manually after the event is published. All subsequent billing is handled automatically by FlexiBill.
{% endhint %}

For monitoring guidance, see [Dashboard & Monitoring](/subscription-and-billing/flexibill/subscription-and-billing/billing/whatsapp-portal-for-subscription/dashboard-and-monitoring).

## FAQ

<details>

<summary>Can I edit a Subscription event after publishing it?</summary>

Yes. Go to the Accept Order event list, find your event, and click the action menu (⋮) to edit. Note that changes to billing frequency or plan amounts may affect active subscribers — review carefully before saving.

</details>

<details>

<summary>Can I create multiple Subscription events?</summary>

Yes. There is no limit on the number of Subscription events you can create. This is useful for offering different billing frequencies or completely separate subscription products.

</details>

<details>

<summary>Can I reactivate a Subscription event that has ended?</summary>

Yes. Events that have ended can be reactivated from the Accept Order event list in your dashboard.

</details>

<details>

<summary>What is the maximum number of plan options I can create?</summary>

Up to 10 plan tiers per event using Price Reference.

</details>


# Dashboard and Monitoring

WhatsApp Subscription activity is tracked across **two separate dashboards** — one for registration monitoring and one for billing and payment monitoring. Understanding which dashboard to use for each purpose is key to managing your subscriptions effectively.

***

## Overview

| What You Want to Monitor                         | Where to Look                 | Dashboard                   |
| ------------------------------------------------ | ----------------------------- | --------------------------- |
| **Customer registrations**                       | Accept Order Transaction List | PayChat > Accept Order      |
| **Registration details** (name, plan, timestamp) | Accept Order Transaction List | PayChat > Accept Order      |
| **Recurring bill status** (sent, unpaid, paid)   | FlexiBill Bill Collection     | FlexiBill > Bill Collection |
| **Payment confirmation per cycle**               | FlexiBill Bill Collection     | FlexiBill > Bill Collection |
| **Invoice history per customer**                 | FlexiBill Bill Collection     | FlexiBill > Bill Collection |

***

## Part 1 — Registration Monitoring (Accept Order)

The **Accept Order transaction list** is your source of truth for **subscription registrations**. Every time a customer completes the WhatsApp chat flow and submits their registration, a new entry appears here.

### How to Access

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/).
2. Navigate to **PayChat** > **Accept Order** from the left sidebar.
3. Find your Subscription event in the event list.
4. Click the event name or use the action menu (⋮) to view the **Transaction List**.

### What You Can See

<table><thead><tr><th width="206.203125">Column</th><th>Description</th></tr></thead><tbody><tr><td><strong>Customer Name</strong></td><td>The customer's name as captured from their WhatsApp profile.</td></tr><tr><td><strong>Phone Number</strong></td><td>The WhatsApp number used during registration.</td></tr><tr><td><strong>Email</strong></td><td>Email address collected from the WhatsApp profile.</td></tr><tr><td><strong>Plan Selected</strong></td><td>The subscription tier the customer chose (e.g., Basic, Premium, VIP).</td></tr><tr><td><strong>Registration Date</strong></td><td>The date and time the customer completed the WhatsApp registration flow.</td></tr><tr><td><strong>Status</strong></td><td>Current registration status: <code>Pending</code>, <code>Confirmed</code>, or <code>Processed</code>.</td></tr></tbody></table>

### Registration Statuses

<table><thead><tr><th width="212.76171875">Status</th><th>Meaning</th></tr></thead><tbody><tr><td><strong>Pending</strong></td><td>The customer has submitted the registration form but payment has not yet been confirmed.</td></tr><tr><td><strong>Subscribed</strong></td><td>The first payment has been received and the subscription is active. FlexiBill recurring billing has been triggered.</td></tr></tbody></table>

{% hint style="info" %}
Once a registration reaches **Confirmed** status, the FlexiBill Generate Bill API is automatically triggered. From this point, all recurring billing activity moves to the FlexiBill Bill Collection dashboard.
{% endhint %}

### Filtering and Searching

Use the search and filter bar at the top of the transaction list to narrow down by:

* **Event Name** — filter registrations by a specific Subscription event.
* **Date Range** — view registrations within a specific period.
* **Status** — filter by Pending, Confirmed, or Processed.

***

## Part 2 — Billing & Payment Monitoring (FlexiBill Bill Collection)

The **FlexiBill Bill Collection** dashboard is where you track all **recurring billing activity** — bills generated, delivery status, payment confirmations, and invoice history per customer.

### How to Access

1. Log in to your [DOKU Dashboard](https://dashboard.doku.com/).
2. Navigate to **FlexiBill** > **Bill Collection** from the left sidebar.
3. Use the search or filter options to find bills related to your subscription event.

### What You Can See

<table><thead><tr><th width="199.4921875">Column</th><th>Description</th></tr></thead><tbody><tr><td><strong>Bill Identifier</strong></td><td>The unique ID for each bill generated per cycle (e.g., <code>INV-00001111122112-hwb52</code>).</td></tr><tr><td><strong>Customer Name</strong></td><td>The subscriber's name.</td></tr><tr><td><strong>Bill Title</strong></td><td>The bill title as configured in the Generate Bill request (e.g., "Tagihan Gym").</td></tr><tr><td><strong>Amount</strong></td><td>The amount billed for this cycle.</td></tr><tr><td><strong>Bill Type</strong></td><td><code>RECURRING</code> for subscription bills.</td></tr><tr><td><strong>Invoice State</strong></td><td>Current delivery state of the bill.</td></tr><tr><td><strong>Payment Status</strong></td><td>Whether the bill has been paid.</td></tr><tr><td><strong>Due Date</strong></td><td>The payment deadline for this billing cycle, including any grace period.</td></tr><tr><td><strong>Billing Cycle</strong></td><td>The cycle number and interval (e.g., cycle 1 of monthly).</td></tr></tbody></table>

### Invoice Statuses

<table><thead><tr><th width="206.33203125">State</th><th>Meaning</th></tr></thead><tbody><tr><td><strong>INVOICE_SENT</strong></td><td>The bill has been generated and sent to the customer via WhatsApp and/or email.</td></tr><tr><td><strong>INVOICE_VIEWED</strong></td><td>The customer has opened the invoice link.</td></tr><tr><td><strong>PAYMENT_PENDING</strong></td><td>The customer has initiated payment but it has not yet been confirmed.</td></tr><tr><td><strong>PAID</strong></td><td>Payment for this billing cycle has been successfully received.</td></tr><tr><td><strong>OVERDUE</strong></td><td>The due date has passed and the customer has not paid.</td></tr><tr><td><strong>GRACE_PERIOD</strong></td><td>The bill is within the configured grace period after the due date.</td></tr></tbody></table>

### Payment Statuses

<table><thead><tr><th width="148.1953125">Status</th><th>Meaning</th></tr></thead><tbody><tr><td><strong>UNPAID</strong></td><td>No payment received for this cycle yet.</td></tr><tr><td><strong>PAID</strong></td><td>Payment confirmed for this cycle.</td></tr><tr><td><strong>FAILED</strong></td><td>Payment was attempted but not completed successfully.</td></tr></tbody></table>

👉 [*Learn more*](/subscription-and-billing/flexibill/subscription-and-billing/billing/view-subscription-billing)

***

## Monitoring Workflow

Here is the recommended monitoring routine for WhatsApp Subscription:

### Daily Check — New Registrations

1. Open **PayChat > Accept Order** > your Subscription event.
2. Check the transaction list for new **Pending** entries.
3. If **Auto Confirmation** is not enabled, manually confirm pending registrations to activate their subscription.

### Billing Cycle Check — Payment Status

1. Open **FlexiBill > Bill Collection**.
2. Filter by the current billing period.
3. Check for bills in **OVERDUE** or **GRACE\_PERIOD** state.
4. For overdue bills, consider sending a follow-up via Bill Broadcast if needed.

### Monthly Reconciliation

1. Export the transaction list from **Accept Order** for a full registration log.
2. Export the bill list from **FlexiBill Bill Collection** for a full payment log.
3. Cross-reference by customer phone number or beneficiary ID to reconcile registrations against paid billing cycles.

***

## Understanding the Billing Cycle

When a customer registers and completes their first payment, FlexiBill creates a recurring billing schedule. Each bill in the cycle has its own invoice number, delivery state, and payment status — all visible in **FlexiBill Bill Collection**.

***

## FAQ

<details>

<summary>Why can't I see payment status in the Accept Order transaction list?</summary>

The Accept Order transaction list tracks registration activity only — who signed up, when, and which plan they chose. Recurring payment status is managed by FlexiBill and is visible in **FlexiBill > Bill Collection**.

</details>

<details>

<summary>How do I know when a customer's recurring bill has been sent?</summary>

In **FlexiBill > Bill Collection**, bills with the state **INVOICE\_SENT** have been successfully delivered to the customer via WhatsApp and/or email.

</details>

<details>

<summary>What if a customer misses a payment?</summary>

The bill will move to **GRACE\_PERIOD** state if a grace period is configured, then to **OVERDUE** if unpaid. You can monitor this in FlexiBill Bill Collection and follow up using Bill Broadcast if needed.

</details>

<details>

<summary>Can I export transaction and billing data?</summary>

Yes. Both the Accept Order transaction list and FlexiBill Bill Collection support data export. Use the export function in each dashboard to download records for reconciliation or reporting.

</details>

<details>

<summary>Where do I see the total revenue from a Subscription event?</summary>

Use **FlexiBill Bill Collection**, filtered by the relevant billing period and payment status **PAID**, to calculate total collected revenue per subscription event.

</details>


# View Subscription Billing

{% hint style="info" %}
This page covers the **View Subscription Billing** feature. To create new billing → Create Bulk Subscription
{% endhint %}

Monitor all customer billing — invoice status, payment history, and revenue summary — from a single page on the DOKU Dashboard.

## Features & Benefits

**📊 Revenue Summary Dashboard**

View expected vs. received revenue and outstanding invoices in real time, with a period filter for customized reporting.

**🔍 Flexible Search & Filter**

Search billing records by Member Name, Bill Identifier, or File Name, and filter by Payment Status or Activity Log state.

**📋 Detailed Bill View**

Access complete details per bill — from member data and payment information to billing cycle configuration and a timestamped activity log.

## How It Works

{% stepper %}
{% step %}

#### Open the Bill Menu

Navigate to Subscription and Billing → Bill to see all registered invoices
{% endstep %}

{% step %}

#### Monitor Status

Use the Billing Summary to track revenue and outstanding invoices
{% endstep %}

{% step %}

#### View Bill Detail

Click any bill to view complete details including the activity log and payment history
{% endstep %}
{% endstepper %}

## Capability Details

{% tabs %}
{% tab title="Billing Summary" %}
Use the Billing Summary to track revenue and outstanding invoices.

<figure><img src="/files/nkOWHjkUANvkiUldcDJo" alt=""><figcaption></figcaption></figure>

**How to access:**

1. Navigate to **Subscription and Billing → Bill**
2. The summary card appears automatically at the top of the page

**Available metrics:**

<table><thead><tr><th width="276.13671875">Metric</th><th>Description</th></tr></thead><tbody><tr><td><strong>Revenue — Expected</strong></td><td>Total projected income from all issued billing invoices</td></tr><tr><td><strong>Revenue — Received</strong></td><td>Revenue that has actually been collected from paid invoices</td></tr><tr><td><strong>Outstanding Invoice — Current</strong></td><td>Unpaid invoices that are still within their invoice term (not yet overdue)</td></tr><tr><td><strong>Outstanding Invoice — Overdue</strong></td><td>Unpaid invoices that have exceeded their due date without payment</td></tr></tbody></table>

Use the **period filter** in the top right to adjust the summary time range (e.g., Last Month, custom date range).

✅ Use the Overdue metric to identify customers who need follow-up.
{% endtab %}

{% tab title="Bill List" %}

<figure><img src="/files/cb0asRR4XHzMbblyKNLv" alt=""><figcaption></figcaption></figure>

**Available columns in the bill list:**

<table><thead><tr><th width="161.0625">Column</th><th>Description</th></tr></thead><tbody><tr><td><strong>Bill Identifier</strong></td><td>The billing ID — auto-generated by the system or entered manually by the merchant</td></tr><tr><td><strong>Member Name</strong></td><td>The customer name associated with the bill</td></tr><tr><td><strong>File Name</strong></td><td>The name of the file used during the billing data upload</td></tr><tr><td><strong>Bill Title</strong></td><td>The name of the billed service</td></tr><tr><td><strong>Created Date</strong></td><td>The date the bill was created</td></tr><tr><td><strong>Due Date</strong></td><td>The payment deadline for the customer</td></tr><tr><td><strong>Checkout Link</strong></td><td>The unique payment link used by the customer to complete payment</td></tr><tr><td><strong>Activity Log</strong></td><td>The latest invoice delivery status</td></tr><tr><td><strong>Payment Status</strong></td><td>The current payment condition of the bill</td></tr></tbody></table>

**Payment Status values:**

<table><thead><tr><th width="160.4765625">Status</th><th>Description</th></tr></thead><tbody><tr><td><strong>Unpaid</strong></td><td>Invoice has been sent and is awaiting payment from the customer</td></tr><tr><td><strong>Paid</strong></td><td>Customer has completed payment</td></tr><tr><td><strong>Overdue</strong></td><td>Invoice due date has passed without payment</td></tr></tbody></table>

**Activity Log states:**

<table><thead><tr><th width="175.05078125">State</th><th>Description</th></tr></thead><tbody><tr><td><strong>Invoice In Process</strong></td><td>The system is generating the invoice</td></tr><tr><td><strong>Invoice Created</strong></td><td>Invoice has been created and is awaiting delivery</td></tr><tr><td><strong>Invoice Sent</strong></td><td>Invoice has been successfully delivered to the customer</td></tr><tr><td><strong>Invoice Error</strong></td><td>Delivery failed — typically due to insufficient deposit balance. Top up your deposit and the system will automatically retry</td></tr><tr><td><strong>Receipt Created</strong></td><td>Receipt has been created after payment and is awaiting delivery</td></tr><tr><td><strong>Receipt Sent</strong></td><td>Receipt has been successfully delivered to the customer</td></tr></tbody></table>
{% endtab %}

{% tab title="Search & Filter" %}
**Search parameters:**

<table><thead><tr><th width="178.8828125">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><strong>Member Name</strong></td><td>Search by customer name</td></tr><tr><td><strong>Bill Identifier</strong></td><td>Search by bill ID</td></tr><tr><td><strong>File Name</strong></td><td>Search by upload file name</td></tr></tbody></table>

Combine search parameters with a **date filter** for more precise results.

**Filter options:**

<table><thead><tr><th width="181.82421875">Filter</th><th>Options</th></tr></thead><tbody><tr><td><strong>Payment Status</strong></td><td>Paid, Unpaid, Overdue</td></tr><tr><td><strong>Activity Log</strong></td><td>Invoice In Process, Invoice Created, Invoice Error, Invoice Sent, Receipt Created, Receipt Sent</td></tr></tbody></table>

✅ Use the **Overdue + Invoice Sent** filter combination to find customers who have received an invoice but have not yet paid.
{% endtab %}

{% tab title="Bill Detail" %}

<figure><img src="/files/jJecJHCMlc8Qpy4BX5O1" alt=""><figcaption></figcaption></figure>

**How to open:** Click any row in the bill list to open the full detail page.

**Available information:**

<table><thead><tr><th width="163.07421875">Section</th><th>Contents</th></tr></thead><tbody><tr><td><strong>Bill Summary</strong></td><td>Billing start date, due date, total payment, payment status, and next billing date</td></tr><tr><td><strong>Member Details</strong></td><td>Member ID, name, phone number, and email</td></tr><tr><td><strong>Payment Details</strong></td><td>Checkout link, created date, due date, total, payment status, payment date, invoice number, and payment method</td></tr><tr><td><strong>Payment History</strong></td><td>Complete list of all payment transactions for this bill</td></tr><tr><td><strong>Bill Details</strong></td><td>Bill identifier, title, description, file name, and custom bill information</td></tr><tr><td><strong>Bill Cycle</strong></td><td>Cycle type, interval, date, month, start date, end date type, and end date</td></tr><tr><td><strong>Activity Log</strong></td><td>Timestamped activity entries for every stage of the invoice lifecycle</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

## Merchant & Customer Experience

#### Merchant View

* Monitor all bills from **Subscription and Billing → Bill**
* Use **Billing Summary** for daily or monthly revenue monitoring
* Use **Search & Filter** to locate specific billing records
* Click a bill to access complete details and the activity log

#### Customer View

Customers cannot access this page directly. They receive:

* **Invoice** via email or WhatsApp, containing billing details and a payment link for each cycle
* **Receipt** via email after a successful payment

## Terms & Conditions

* Billing history is available for as long as the merchant account remains active
* Activity log entries are recorded automatically at every stage of the invoice process
* If an **Invoice Error** occurs, top up your deposit balance — the system will automatically retry the delivery

## FAQ

<details>

<summary>What should I do if an invoice shows "Invoice Error"?</summary>

Invoice Error typically occurs when the deposit balance is insufficient to cover the delivery fee. Top up your deposit balance under Account Billing — the system will automatically retry delivering the invoice to the customer.

</details>

<details>

<summary>Can a merchant resend an invoice manually?</summary>

Currently, resending is handled automatically by the system once the deposit balance is sufficient. Manual resend functionality will be available in a future release.

</details>

<details>

<summary>How do I find customers who have not yet paid?</summary>

Use the **Payment Status → Unpaid** or **Overdue** filter on the Bill page to display all unsettled invoices.

</details>


# Subscriptions

**Subscriptions** is the plan-based approach to billing in FlexiBill. You define your product catalog — what you sell, how it is priced, and when customers are billed — then enroll customers by linking them to the appropriate plan. From that point, FlexiBill manages the entire billing lifecycle automatically.

Use Subscriptions when your business sells **defined packages, tiers, or memberships** and you need per-customer billing schedule and status visibility over time.

{% hint style="info" %}
Subscriptions defines the billing rules per customer. The **Billing** section shows what invoices those rules have generated and their current payment status. → [Go to Billing](/subscription-and-billing/flexibill/subscription-and-billing/billing)
{% endhint %}

***

## What You Configure Here

Subscriptions is organized into two layers:

### Collection and Plan — Your Product Catalog

A **Collection** is a container for a product or service offering — for example, "Monthly Membership" or "Internet Packages". Each Collection holds one or more **Plans** that define the specific pricing model and billing cycle.

* Set the **pricing model** per plan: Flat Fee, Per Unit, Tiered, Volume, or Stairstep
* Set the **billing cycle** per plan: daily, weekly, monthly, annual, or interval-based
* Configure **Invoice Term** and **Grace Period** at the collection level
* Create **Coupons** to apply discounts to subscriptions within the collection
* Add **Tax** configurations that apply automatically on every invoice

👉 [*Collection and Plan*](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/collection-and-plan)

### Create Subscription — Enrolling Customers

A **Subscription** links a customer (Member) to a Plan. Once created, the system takes over — invoices are issued automatically on schedule and the subscription status reflects the customer's current billing standing at all times.

Subscriptions can be created in two ways:

* **Merchant Initiate** — merchant creates the subscription from the dashboard on behalf of the customer

  &#x20;👉[*Create Subscription - Merchant Initiate*](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/create-subscription-merchant-initiate)
* **Customer Initiate** — customer selects a plan and subscribes themselves via a shareable **Pricing Table**

  👉 [*Create Subscription - Customer Initiate*](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/create-subscription-customer-initiate)

***

## Features & Benefits

**💲 Pricing Models**

Configure exactly how billing amounts are calculated per customer:

<table><thead><tr><th width="128.6875">Model</th><th>How Amount Is Calculated</th><th>Best For</th></tr></thead><tbody><tr><td><strong>Flat Fee</strong></td><td>Fixed charge per cycle, regardless of quantity</td><td>Monthly tuition, fixed rent, standard membership</td></tr><tr><td><strong>Per Unit</strong></td><td>Charge × quantity subscribed</td><td>Per-seat SaaS, per-user licensing</td></tr><tr><td><strong>Tiered</strong></td><td>Quantity distributed across price tiers progressively</td><td>Usage-based services with volume incentives</td></tr><tr><td><strong>Volume</strong></td><td>All units priced at the tier the total quantity falls into</td><td>Wholesale or bulk pricing</td></tr><tr><td><strong>Stairstep</strong></td><td>Flat price per quantity tier, not per unit</td><td>Packaged service tiers with fixed tier pricing</td></tr><tr><td><strong>Open Amount</strong></td><td>No fixed price in the plan — amount is entered at subscription creation and charged consistently each cycle</td><td>Negotiated or customer-specific pricing that differs per customer</td></tr></tbody></table>

👉 For a detailed explanation of each model including Open Amount → [Collection and Plan](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/collection-and-plan)

**🗓️ Per-Customer Billing Schedule**

Each subscription has its own start date and end condition — independent of other customers. Two customers on the same plan can have completely different billing dates based on when they enrolled.

**🔁 Automatic Renewal**

Subscriptions renew automatically each cycle without any merchant action. A new bill is created at the start of every new cycle and delivered to the customer — the merchant only needs to monitor payment status.

**🌐 Customer Self-Subscribe via Pricing Table**

Create a branded, shareable plan selection page. Customers browse plans, select one, verify their email via OTP, and complete their first payment — entirely self-served. The Pricing Table can be shared via URL or embedded on a website.

**📦 Flexible End Conditions**

Choose how a subscription ends: **Unlimited** (runs until manually stopped), **Specific Date** (ends on a chosen date), or **After X Times** (ends after a defined number of billing cycles).

**🔖 Coupon Discounts**

Apply discounts to subscriptions through coupons scoped to a Collection. Configure the discount type (flat amount or percentage), control how many subscriptions can redeem it (unlimited or limited stock), and define how long the discount applies per subscription (unlimited or limited billing cycles). Coupons can be applied to the full invoice amount or restricted to selected plans only.

***

## How It Works

{% stepper %}
{% step %}

#### Build Your Product Catalog

Create a **Collection** to represent your product or service, then add one or more **Plans** with the appropriate pricing model and billing cycle. Configure the invoice term and grace period at the collection level.

*Example: Collection "Monthly Membership" → Plans "Basic IDR 150,000/month", "Pro IDR 300,000/month"*
{% endstep %}

{% step %}

#### Enroll the Customer

Register the customer as a **Member** in Member Center, then create a **Subscription** by linking the member to a plan. Set the start date and end condition.

Alternatively, publish a **Pricing Table** and let the customer select a plan and enroll themselves.

*The subscription is created with status **Created**. If the start date is in the future, status is **Future Active**.*
{% endstep %}

{% step %}

#### Invoice Is Issued Automatically

On the start date (or billing date), FlexiBill automatically generates an invoice for the subscription and delivers it to the customer via Email or WhatsApp.

*Subscription status moves to **Pending** — awaiting payment from the customer.*
{% endstep %}

{% step %}

#### Customer Pays

The customer receives the invoice, clicks the payment link, and completes payment using their preferred method. If the customer has enabled **auto-debit** (via Account Billing), the charge is processed automatically without any customer action.

*Upon successful payment, subscription status moves to **Active**.*
{% endstep %}

{% step %}

#### Subscription Runs Active

The subscription is now active. The customer's access or service continues uninterrupted throughout the billing period. If the customer does not pay within the grace period, the subscription moves to **Expired**.
{% endstep %}

{% step %}

#### Next Cycle — New Bill Created

At the start of the next billing cycle, FlexiBill automatically creates a new bill for the subscription and delivers a fresh invoice to the customer. The cycle repeats from Step 3 until the subscription reaches its configured end condition.

*The subscription continues until: the end date is reached, the defined number of cycles is completed, or the merchant ends it manually.*
{% endstep %}
{% endstepper %}

***

## What's in This Section

{% tabs %}
{% tab title="Collection and Plan" %}
The foundation of Subscriptions — define your product catalog before enrolling any customers. A **Collection** acts as a container for a product or service offering, while **Plans** define the specific pricing model and billing cycle within that collection.

**Use when:**

* You are setting up a new product or service to be billed on a recurring basis
* You need to offer multiple pricing tiers or packages under the same product category
* You want to configure invoice terms, grace periods, taxes, or coupon discounts at the product level

**Supports:**

* Six pricing models: Flat Fee, Per Unit, Tiered, Volume, Stairstep, Open Amount
* Recurring and One-Off Charge plan types
* Tax configurations applied automatically per invoice
* Coupon discounts with stock limits and billing duration controls

👉 [Collection and Plan](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/collection-and-plan)
{% endtab %}

{% tab title="Create Subscription - Merchant Initiate" %}
The merchant creates a subscription on behalf of a customer directly from the DOKU Dashboard. Use this when you are onboarding a customer manually — for example, after a phone call, an in-person sign-up, or a sales conversation.

**Use when:**

* The customer is not self-enrolling and you need to register them directly
* You want full control over plan selection, start date, and end condition per customer
* The customer's billing details have been agreed upon in advance (especially for Open Amount plans)

**Supports:**

* Single Plan subscription types
* Custom or auto-generated subscription IDs
* Start date up to one year in the future
* Three end conditions: Unlimited, Specific Date, or After X Times
* Tax and coupon application at the subscription level

👉 [Create Subscription — Merchant Initiate](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/create-subscription-merchant-initiate)
{% endtab %}

{% tab title="Create Subscription - Customer Initiate" %}
The customer selects their own plan and subscribes through a **Pricing Table** — a branded, shareable plan selection page created by the merchant. No merchant involvement is needed at the point of enrollment.

**Use when:**

* You want customers to self-serve — browse plans, select one, and pay without contacting you
* You are embedding a subscription sign-up flow on your website or sharing a link via email or social media
* You want to reduce operational overhead for high-volume customer onboarding

**Supports:**

* Up to 10 plans per Pricing Table, grouped by billing frequency
* Customizable appearance: title, subtitle, button text, brand colors
* Coupon application at checkout
* Email OTP verification to ensure valid customer contact
* Auto-debit enrollment on the first payment

👉 [Create Subscription — Customer Initiate](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/create-subscription-customer-initiate)&#x20;
{% endtab %}
{% endtabs %}

***

## Merchant & Customer Experience

#### Merchant View

* Build the product catalog at **Subscription and Billing → Collection**
  * Create and manage **Collections** and **Plans**
  * Create and manage **Coupons** per collection
  * Configure **Tax** rates per collection
* Register customers at **Member Center** before creating subscriptions
* Create and monitor subscriptions at **Subscription and Billing → Subscription**
  * Create individually via **Create Subscription** (Merchant Initiate)
  * Or publish a **Pricing Table** for customer self-enrollment
* Track subscription status per customer: Created, Future Active, Pending, Active, Expired

#### Customer View

* Receives a plan selection page (Pricing Table) via a shared link or on the merchant's website
* Selects a plan, verifies their email via OTP, and completes the first payment
* Receives invoices automatically via Email or WhatsApp at the start of every new cycle
* May enable auto-debit on the first invoice — subsequent cycles are charged without any manual action required

***

## Terms & Conditions

* A single subscription can only contain plans from **one Collection**
* All plans in a subscription must share the **same billing cycle**
* Maximum **10 plans** per subscription
* Plans with active subscriptions cannot be deleted — they can only be deactivated
* Subscription start date cannot be set to a date in the past
* Auto-debit payment collection requires activating **Account Billing** separately → [Activate Account Billing](/subscription-and-billing/flexibill/account-billing/account-billing-activation)

***

## FAQ

<details>

<summary>What does each subscription status mean and what should I do?</summary>

<table><thead><tr><th width="98.98828125">Status</th><th>What it means</th><th>Recommended action</th></tr></thead><tbody><tr><td><strong>Created</strong></td><td>Subscription exists but the first invoice has not yet been issued — typically because the start date has not arrived yet</td><td>No action needed — the invoice will be issued automatically on the start date</td></tr><tr><td><strong>Future Active</strong></td><td>Subscription is confirmed and scheduled to start on a future date</td><td>No action needed — monitor until the start date arrives and the first invoice is issued</td></tr><tr><td><strong>Pending</strong></td><td>Invoice has been issued and delivered — awaiting payment from the customer</td><td>Monitor; follow up with the customer if payment is approaching the due date</td></tr><tr><td><strong>Active</strong></td><td>Customer has paid and the subscription is running normally</td><td>No action needed — the next cycle bill will be created automatically</td></tr><tr><td><strong>Expired</strong></td><td>Invoice was not paid within the grace period — the subscription is no longer active</td><td>Follow up with the customer; create a new subscription if they wish to re-enroll</td></tr></tbody></table>

</details>

<details>

<summary>Do I need to set up a Collection and Plan before enrolling customers?</summary>

Yes — Collection and at least one Plan must exist before you can create a Subscription. If you need to bill customers quickly without setting up a product catalog, use **Bulk Bill Upload** under the Billing section instead — no plan configuration is required.

</details>

<details>

<summary>Can different customers on the same plan have different billing dates?</summary>

Yes. Each subscription has its own start date, and billing dates are calculated from that start date for interval billing. Two customers on the same monthly plan — one starting on the 5th and another on the 20th — will be billed on their respective individual dates independently.

</details>

<details>

<summary>How does a plan upgrade or downgrade work?</summary>

FlexiBill does not support in-place plan switching. To move a customer to a different plan, end their current subscription by setting an end date, then create a new subscription on the target plan with the desired start date. Billing on the old plan stops; billing on the new plan begins from the new start date.

</details>

<details>

<summary>Can I limit how many customers can subscribe to a specific plan?</summary>

Yes. When creating a Plan, configure **stock** as either unlimited or limited to a specific number. Once the stock limit is reached, no new subscriptions can be created on that plan.

</details>

<details>

<summary>What happens if a customer does not pay before the grace period ends?</summary>

The subscription moves to **Expired** status. The customer loses access to the service (based on your business logic) and no further invoices are issued for that subscription. To reactivate the customer, create a new subscription for them on the appropriate plan.

</details>

<details>

<summary>Can I apply a discount to only some customers on the same plan?</summary>

Yes. Coupons are applied at the individual subscription level — not at the plan level. You can apply a coupon to one customer's subscription while another customer on the same plan is billed at full price. This makes coupons suitable for targeted promotions, loyalty discounts, or negotiated pricing for specific customers.

</details>


# Collection and Plan

{% hint style="info" %}
This page covers the **Collection and Plan** feature. For step-by-step instructions on creating a subscription → Create Subscription [Merchant Initiate](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/create-subscription-merchant-initiate) and [Customer Initiate](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/create-subscription-customer-initiate)
{% endhint %}

**Collection and Plan** is the foundation of the Subscriptions feature. Before creating a subscription, you need to define your products or services through a **Collection**, set pricing and billing cycles through **Plans**, configure applicable **Taxes**, and optionally create **Coupons** for discounts.

**📦 Hierarchical Product Structure**

Organize your products in a Collection (product or service offering) that contains multiple Plans (pricing packages) — making it easy to manage a complex product catalog.

**💲 Six Pricing Models**

Choose from Flat Fee, Per Unit, Tiered, Volume, Stairstep, or Open Amount — to match exactly how your business calculates charges.

**🔁 Recurring and One-Off Charge Plan Types**

Each plan can be configured as either a **Recurring Plan** — which generates a new invoice automatically at every billing interval — or a **One-Off Charge** — which issues a single invoice and grants the customer access for a defined **Access Period** (including Lifetime).&#x20;

**🖼️ Plan Image for Pricing Table**

Upload an image for each plan that is displayed on the Pricing Table — the customer-facing plan selection page. A visual plan card helps customers quickly identify and choose the right package when self-subscribing.

**🔢 Stock Control per Plan**

Limit the number of subscriptions available for a plan by configuring a stock count. Stock is consumed only when a new subscription is created — not on renewal cycles — making it suitable for capacity-limited offerings such as cohort-based courses or limited membership slots.

**🧾 Flexible Tax Configuration**

Add a tax configuration to a collection that is automatically applied on every invoice, separate from the plan price.

**🔖 Discount via Coupon**

Create discount coupons scoped to a Collection. Control the discount type, validity period, member eligibility, redemption limit per subscription, and whether the discount applies to the full invoice or selected plans only.

## How It Works

{% stepper %}
{% step %}

#### Create a Collection

Create a Collection as the container for your product or service. Configure the **Invoice Term** (payment deadline) and **Grace Period** (buffer after due date) that will apply to all plans within this collection.

*Example: Collection "School Tuition 2025" — Invoice Term 15 days, Grace Period 7 days.*&#x20;
{% endstep %}

{% step %}

#### Add Plans

Add one or more Plans to the Collection. For each plan, configure the **pricing model** (Flat Fee, Per Unit, Tiered, Volume, Stairstep, or Open Amount) and the **billing cycle** (Recurring or One-Off Charge).

*Example: Plan "Monthly Tuition" — Flat Fee IDR 500,000, Recurring, Every Month, ends after 12 bills.*&#x20;
{% endstep %}

{% step %}

#### Create Coupons *(Optional)*

Create Coupons scoped to the Collection to offer discounts to specific members or promotions. Configure the discount type, stock, redemption limit per subscription, validity period, and whether the discount applies to the full invoice or selected plans only.

*Example: Coupon "NEWSTUDENT10" — 10% off, stock 100, applies for the first 3 billing cycles per subscription, valid for the current academic year.*&#x20;
{% endstep %}

{% step %}

#### Configure Tax *(Optional)*

Create a Tax and associate it with the Collection. Tax is applied automatically on top of the plan price on every invoice — no manual calculation needed at billing time.

*Example: Tax "VAT 11%" — applied to all invoices in "School Tuition 2025".*
{% endstep %}

{% step %}

#### Apply to a Subscription

Select the Collection and Plan when creating a Subscription to link a customer (Member) to your product. Apply Tax and Coupon if applicable. The subscription inherits the billing schedule and pricing — invoices are issued automatically from this point.

*Example: Subscribe student Rachma to "Monthly Tuition" starting September 1, ends after 12 bills, with VAT 11% and coupon "NEWSTUDENT10" applied.*&#x20;
{% endstep %}
{% endstepper %}

## Capability Details

{% tabs %}
{% tab title="Collection" %}

### What is a Collection?

A Collection represents a product or service offering. It acts as a container for Plans, Coupons, and Taxes — and defines the **Invoice Term** and **Grace Period** that apply to all plans within it.

***

### View Collection List

Navigate to **Subscription and Billing → Collection → Collection** to see all collections. The list displays the collection name, collection ID, total plan, total add on, total coupon, and creation date.

<figure><img src="/files/WTh5uJMNg3T24KSdZgW4" alt=""><figcaption></figcaption></figure>

***

### Create Collection

{% stepper %}
{% step %}

#### Navigate to Collection

Navigate to **Subscription and Billing → Collection → Collection**

<figure><img src="/files/Goqh2jAEb47yipRgCLaZ" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Create the collection

Click **Create Collection**

<figure><img src="/files/jh6if1PY3JQNu2MdIamH" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Fill in the collection details

Fill in the **Collection Name** — must be unique within your merchant account — and **Description**
{% endstep %}

{% step %}

#### Configure Invoice Term

Configure **Invoice Term** — the time window between invoice issuance and the payment due date:

| Invoice Issued | Invoice Term     | Due Date       |
| -------------- | ---------------- | -------------- |
| July 5         | Due upon receipt | July 5, 23:59  |
| July 5         | 15 days          | July 20, 23:59 |
| July 5         | End of month     | July 30, 23:59 |
| {% endstep %}  |                  |                |

{% step %}

#### Configure Grace Period

Configure **Grace Period** — a buffer after the due date where no penalties apply and the service remains active:

| Due Date      | Grace Period    | Grace Period End |
| ------------- | --------------- | ---------------- |
| July 5, 23:59 | No grace period | —                |
| July 5, 23:59 | 15 days         | July 20, 23:59   |
| {% endstep %} |                 |                  |

{% step %}

#### Save

Click **Save**
{% endstep %}
{% endstepper %}

***

### Edit Collection

{% stepper %}
{% step %}

#### Open the edit action

In the collection list, click the **⋮** icon on the collection to edit
{% endstep %}

{% step %}

#### Select Edit

You can edit the collection name and description
{% endstep %}

{% step %}

#### Click Save

{% endstep %}
{% endstepper %}

{% hint style="info" %}
Invoice Term and Grace Period cannot be changed after a collection has active subscriptions. Create a new collection if different terms are required.
{% endhint %}

***

### See Detail

Click the **⋮** icon on a collection and select **See Detail** to view the full collection configuration — including all associated plans, coupons, and taxes.

<figure><img src="/files/h47qU340qgZNQbDvCRQ0" alt=""><figcaption></figcaption></figure>

***

### ✅ Usage examples:

* "School Tuition 2025" — collection for all school billing packages in 2025
* "Gym Membership" — collection for monthly and annual gym membership plans
* "Property Rental" — collection for boarding house or shophouse rental packages
  {% endtab %}

{% tab title="Plan" %}

### What is a Plan?

A Plan defines the pricing model and billing cycle for a product or service within a Collection. Every subscription must be linked to at least one plan.

***

### View Plan List

Navigate to **Subscription and Billing → Collection → Plan** to see all plans. Filter by collection or status to locate a specific plan.

<figure><img src="/files/QP4gJNOZsZmD7ynvGjMX" alt=""><figcaption></figcaption></figure>

***

### Create Single Plan

{% stepper %}
{% step %}

#### Navigate to Plan

Navigate to **Subscription and Billing → Collection → Plan**
{% endstep %}

{% step %}

#### Start creating a plan

Click **Create Plan → Single Plan**

<figure><img src="/files/6RPfGJqLJnLAjVRCDZES" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Fill in General Information

Fill in **General Information**:

* **Collection** — Select the collection this plan belongs to
* **Plan Name** — A name that helps identify this plan. Must be unique within your merchant account
* **Image** — Optional plan image displayed on the Pricing Table (JPG, JPEG, PNG, BMP; min 50KB, max 5MB)
* **Description** — Additional details about the plan
  {% endstep %}

{% step %}

#### Select the pricing model

Select the **Pricing Model**:

<table><thead><tr><th width="121.9453125">Model</th><th width="236.65625">Configuration Required</th><th>Example</th></tr></thead><tbody><tr><td><strong>Flat Fee</strong></td><td>Set a single price — charged as-is every cycle regardless of quantity</td><td>IDR 500,000/month</td></tr><tr><td><strong>Per Unit</strong></td><td>Select a unit label, then set the price per unit</td><td>IDR 20,000 per user/month</td></tr><tr><td><strong>Tiered</strong></td><td>Set quantity ranges (From / To) with a price per unit for each range. Quantity is distributed progressively across tiers starting from the lowest</td><td>Tier 1: 1–5 → IDR 15,000/unit; Tier 2: 6–10 → IDR 13,000/unit; Tier 3: 11+ → IDR 11,000/unit</td></tr><tr><td><strong>Volume</strong></td><td>Set quantity ranges (From / To) with a price per unit for each range. All units are priced at the single tier the total quantity falls into</td><td>Range 1–10: IDR 15,000/unit; Range 11+: IDR 12,000/unit — if customer buys 8, all 8 are charged at IDR 15,000</td></tr><tr><td><strong>Stairstep</strong></td><td>Set quantity ranges (From / To) with a flat price for each range — not per unit</td><td>Range 1–10: IDR 100,000 flat; Range 11–20: IDR 180,000 flat</td></tr><tr><td><strong>Open Amount</strong></td><td>No price is set in the plan — a minimum and maximum allowed amount can be configured as guardrails. The actual amount is entered at subscription creation</td><td>Min IDR 500,000 / Max IDR 5,000,000 — merchant or customer enters the agreed amount when subscribing</td></tr></tbody></table>

{% hint style="info" %}
**Tiered, Volume, and Stairstep** require you to define quantity ranges by clicking **Add Range** for each tier. The last tier's upper boundary is automatically set to "Above" — meaning it applies to all quantities beyond the previous tier's upper limit.

**Open Amount** carries no fixed price in the plan. The billing amount is entered at subscription creation — by the merchant or by the customer via the Pricing Table — and that same amount is charged automatically on every subsequent cycle. To prevent out-of-range entries, you can configure a **Minimum Amount** and a **Maximum Amount** as guardrails. If the entered amount falls outside these bounds, the subscription cannot be created.
{% endhint %}
{% endstep %}

{% step %}

#### Preview the price

**Price Preview** — Available for all pricing models. After configuring the pricing, use the **Price Preview** calculator at the bottom of the pricing section: enter a quantity and the system instantly shows the exact total the customer pays. Use this to verify your pricing configuration before saving.
{% endstep %}

{% step %}

#### Review amount and currency rules

**Amount and Currency Rules**

<table><thead><tr><th width="112.25390625">Currency</th><th width="218.921875">Decimal Support</th><th>Notes</th></tr></thead><tbody><tr><td><strong>IDR</strong></td><td>❌ Not supported</td><td>Prices cannot be entered as decimals, and the system rounds up to the nearest whole number on every invoice</td></tr><tr><td><strong>MYR</strong></td><td>✅ Up to 2 decimal places</td><td>Prices are charged as entered — e.g., MYR 19.90 is billed as MYR 19.90</td></tr></tbody></table>
{% endstep %}

{% step %}

#### Select payment type

Select **Payment Type**:

* **Prepaid** — Customer pays before the service is activated
* **Postpaid** — Customer pays after using the service *(coming soon)*
  {% endstep %}

{% step %}

#### Set stock

Set **Stock**:

* **Unlimited** — No cap on the number of subscriptions
* **Limited** — Enter the maximum number of subscriptions allowed on this plan

{% hint style="info" %}
**Stock is consumed only on the first billing cycle.** When a customer creates a new subscription, the plan stock decreases by one. Subsequent renewal cycles of that subscription do not consume additional stock — the count only decrements at the point of initial enrollment.
{% endhint %}
{% endstep %}

{% step %}

#### Configure the billing cycle

Configure **Billing Cycle — Plan Type**:

**Recurring Plan**

* **Interval** — The gap between one billing cycle and the next. Select how long the system waits after issuing a bill before issuing the next one: Every Day, Every Week, Every 2 Weeks, Every Month, Every 3 Months, Every 6 Months, Every Year
* **Duration** — Choose how long the plan runs:
  * **Unlimited** — Subscription continues until manually ended
  * **Ends after a specific number of bills** — Enter the number of billing cycles

<figure><img src="/files/oJjMqDGOTsT3HGaXwQYN" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Interval vs Frequency:** Interval defines the *gap between cycles* — not a calendar anchor. "Every Month" means the next bill is issued exactly 1 month after the previous one, counted from the subscription start date. If a customer starts on January 15, their bills fall on February 15, March 15, and so on — regardless of the calendar month.

**Duration — Ends after a specific number of bills:** The number entered includes the first bill. A duration of 12 means 12 invoices total are issued — then the subscription ends automatically and the status changes to **Expired**. No manual action or notification is triggered when the duration completes.
{% endhint %}

**One Off Charge**

* **Access Period** — Define how long the customer has access after purchasing. Options include specific durations (e.g., 3 Months, 1 Year) or **Lifetime** for permanent access. Only one invoice is ever generated — no recurring cycle is created.

<figure><img src="/files/vpvI8E4dvBonOhBnhj38" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Lifetime Access Period:** When set to Lifetime, the customer pays once and retains access indefinitely — no expiry, no renewal invoice. This is different from Recurring Unlimited, which continues issuing a new bill every cycle.

**When Access Period ends:** Once a defined Access Period expires, the subscription status changes to **Expired**. To extend access, the merchant must create a new subscription for the customer on the same plan.
{% endhint %}
{% endstep %}

{% step %}

#### Create the plan

Click **Create**
{% endstep %}
{% endstepper %}

***

#### User Story Samples

The following scenarios show how to configure a plan based on real business needs.

**Scenario 1 — School: Monthly Tuition Fee**

> A school charges IDR 500,000 per student every month. Billing runs for one academic year (12 months) and should stop automatically.

| Field         | Value               |
| ------------- | ------------------- |
| Collection    | School Tuition 2025 |
| Plan Name     | Monthly Tuition     |
| Pricing Model | Flat Fee            |
| Price         | IDR 500,000         |
| Payment Type  | Prepaid             |
| Stock         | Unlimited           |
| Plan Type     | Recurring Plan      |
| Interval      | Every Month         |
| Duration      | Ends after 12 bills |

***

**Scenario 2 — English Course: Weekly Class with Tiered Pricing by Program Count**

> An English course charges students based on how many programs they enroll in per week. The more programs, the lower the per-unit rate: 1–5 programs at IDR 15,000/unit, 6–10 at IDR 13,000/unit, 11 and above at IDR 11,000/unit. Billing is weekly with no fixed end date.

| Field         | Value                                          |
| ------------- | ---------------------------------------------- |
| Collection    | English Class                                  |
| Plan Name     | Weekly Basic English                           |
| Pricing Model | Tiered                                         |
| Unit          | program                                        |
| Tier 1        | From 1 To 5 → IDR 15,000/unit                  |
| Tier 2        | From 6 To 10 → IDR 13,000/unit                 |
| Tier 3        | From 11 Above → IDR 11,000/unit                |
| Price Preview | 8 programs → IDR 114,000 (5×15,000 + 3×13,000) |
| Payment Type  | Prepaid                                        |
| Plan Type     | Recurring Plan                                 |
| Interval      | Every Week                                     |
| Duration      | Unlimited                                      |

***

**Scenario 3 — ISP: One-Time Installation Fee**

> An internet provider charges a one-time installation fee of IDR 300,000. After payment, the customer has 1 month of access before their recurring internet plan begins.

| Field         | Value             |
| ------------- | ----------------- |
| Collection    | Internet Packages |
| Plan Name     | Installation Fee  |
| Pricing Model | Flat Fee          |
| Price         | IDR 300,000       |
| Payment Type  | Prepaid           |
| Stock         | Unlimited         |
| Plan Type     | One Off Charge    |
| Access Period | 1 Month           |

***

**Scenario 4 — Co-Working Space: Negotiated Monthly Desk Rental**

> A co-working space offers desk rentals at individually negotiated monthly rates between IDR 1,000,000 and IDR 5,000,000. Each tenant pays a different amount, but billing runs automatically every month with no fixed end date.

| Field          | Value                                         |
| -------------- | --------------------------------------------- |
| Collection     | Desk Rental                                   |
| Plan Name      | Monthly Desk Rental                           |
| Pricing Model  | Open Amount                                   |
| Minimum Amount | IDR 1,000,000                                 |
| Maximum Amount | IDR 5,000,000                                 |
| Payment Type   | Prepaid                                       |
| Stock          | Unlimited                                     |
| Plan Type      | Recurring Plan                                |
| Interval       | Every Month                                   |
| Duration       | Unlimited                                     |
| Amount         | Entered per customer at subscription creation |

{% hint style="info" %}
The minimum and maximum amounts are guardrails — they do not set the price. The actual billing amount for each customer is entered when creating their individual subscription.
{% endhint %}

***

#### Edit Plan

{% stepper %}
{% step %}

#### Open the edit action

In the plan list, click the **⋮** icon on the plan to edit
{% endstep %}

{% step %}

#### Select Edit

Select **Edit**
{% endstep %}

{% step %}

#### Review editable fields

If the plan has **active subscriptions**: only the **Plan Name**, **Image**, and **Description** can be edited

If the plan has **no active subscriptions**: all fields can be edited
{% endstep %}

{% step %}

#### Save

Click **Save**
{% endstep %}
{% endstepper %}

***

#### View Detail

Click the **⋮** icon on a plan and select **View Detail** to view the full plan configuration — including pricing model, billing cycle, stock, and associated subscriptions.

***

#### Other Actions

<table><thead><tr><th width="124.71875">Action</th><th width="145.27734375">Requirement</th><th>Notes</th></tr></thead><tbody><tr><td><strong>Duplicate</strong></td><td>Always available</td><td>Creates a copy with a new code and name suffixed with <code>copy</code>; all fields editable</td></tr><tr><td><strong>Activate / Deactivate</strong></td><td>Always available</td><td>Deactivating prevents new subscriptions while existing ones continue unaffected. A deactivated plan can be reactivated. Plan name cannot be reused while deactivated</td></tr><tr><td><strong>Delete</strong></td><td>No active subscriptions</td><td>Plan is permanently removed; name can be reused</td></tr></tbody></table>

***

### ✅ Usage examples:

* "Regular Tuition" — Flat Fee IDR 500,000/month, Recurring, Every Month
* "Basic English Class" — Tiered, weekly, 3 tiers by number of programs
* "Study Tour" — One-Off Charge, IDR 300,000, Access Period 1 Month
* "Desk Rental" — Open Amount, Recurring, rate negotiated per tenant at enrollment

> **Bundling Plan** — Coming soon.
> {% endtab %}

{% tab title="Coupon" %}

### What is a Coupon?

A Coupon defines a discount benefit applied to a subscription at customer self enrollment or when assigned by the merchant. Each coupon is scoped to a specific Collection and can be configured across four dimensions: **discount type**, **validity period**, **redemption limit**, and **discount scope**.

***

### View Coupon List

Navigate to **Subscription and Billing → Collection → Coupon** to see all coupons, their status, stock remaining, and validity dates.

<figure><img src="/files/uxh0o6J4GVAnx4EholP2" alt=""><figcaption></figcaption></figure>

***

### Create Coupon

{% stepper %}
{% step %}

#### Navigate to Coupon

Navigate to **Subscription and Billing → Collection → Coupon**
{% endstep %}

{% step %}

#### Start creating a coupon

Click **Create Coupon**

<figure><img src="/files/6pWPZHtcNBCmXHPSOGg4" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Fill in General Information

Fill in **General Information**:

* **Coupon Code** — Toggle **Auto Generate Coupon Code** to let the system create a unique code, or enter a custom code manually. Coupon codes must be unique within your merchant account
* **Collection** — Select the collection this coupon belongs to
* **Coupon Name** — A descriptive name for internal reference. Must be unique within your merchant account
* **Description** — Additional details about the coupon
  {% endstep %}

{% step %}

#### Configure Coupon Details

Configure **Coupon Details**:

**Discount Type**

<table><thead><tr><th width="143.953125">Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>Flat</strong></td><td>A fixed monetary deduction from the applicable amount</td></tr><tr><td><strong>Percentage</strong></td><td>A percentage deduction from the applicable amount</td></tr></tbody></table>

**Stock** — The total number of subscriptions that can redeem this coupon. Once stock is exhausted, no new subscriptions can apply this coupon.

{% hint style="info" %}
**Coupon stock is consumed only on the first billing cycle.** When a customer's subscription applies a coupon for the first time, the stock count decreases by one. Subsequent renewal cycles of that same subscription do not consume additional stock.
{% endhint %}

**Redemption Type** — Controls how many billing cycles the discount applies per subscription:

| Setting       | Description                                                                                            |
| ------------- | ------------------------------------------------------------------------------------------------------ |
| **Unlimited** | The coupon discount applies on every invoice for the life of the subscription                          |
| **Limited**   | The discount applies for a defined number of billing cycles per subscription, then stops automatically |
| {% endstep %} |                                                                                                        |

{% step %}

#### Set coupon validity

Set **Coupon Validity**:

* **Start Date** — The date from which the coupon can be redeemed
* **End Date** — The date after which the coupon can no longer be applied to new subscriptions
  {% endstep %}

{% step %}

#### Set member eligibility

Set **Member** eligibility:

* **All** — Any member can redeem this coupon
* **Specific member** — Restrict redemption to a selected member only
  {% endstep %}

{% step %}

#### Configure coupon scope

Configure **Additional Details — Apply Coupon To**:

<table><thead><tr><th width="164.875">Scope</th><th>Description</th></tr></thead><tbody><tr><td><strong>Invoice Amount</strong></td><td>The discount is calculated against the total invoice amount — including all plans and applicable tax</td></tr><tr><td><strong>Selected Items</strong></td><td>The discount applies only to specific plans within the subscription. Plans not selected are invoiced at full price</td></tr></tbody></table>

*Example: A coupon set to "Selected Items — Basic Plan only" applied to a subscription that also includes an add-on — only the Basic Plan line item is discounted; the add-on is charged at full price.*
{% endstep %}

{% step %}

#### Save

Click **Save**
{% endstep %}
{% endstepper %}

***

### Edit Coupon

{% stepper %}
{% step %}

#### Open the edit action

In the coupon list, click the **⋮** icon on the coupon to edit
{% endstep %}

{% step %}

#### Select Edit

Select **Edit**
{% endstep %}

{% step %}

#### Review editable fields

If the coupon has **active redemptions**: only the **Coupon Name** and **Description** can be edited

If the coupon has **no active redemptions**: all fields can be edited
{% endstep %}

{% step %}

#### Save

Click **Save**
{% endstep %}
{% endstepper %}

***

### View Detail

Click the **⋮** icon on a coupon and select **See Detail** to view the full coupon configuration — including discount type, validity period, stock remaining, and redemption settings.

***

### Other Actions

<table><thead><tr><th width="137.40234375">Action</th><th width="168.1875">Requirement</th><th>Notes</th></tr></thead><tbody><tr><td><strong>Duplicate</strong></td><td>Always available</td><td>Creates a copy with a new code and name suffixed with <code>copy</code>; all fields editable</td></tr><tr><td><strong>Activate / Deactivate</strong></td><td>Always available</td><td>Deactivating prevents new subscriptions from redeeming the coupon; existing subscriptions using it are not affected. A deactivated coupon can be reactivated</td></tr><tr><td><strong>Delete</strong></td><td>No active redemptions</td><td>Coupon is permanently removed; code can be reused</td></tr></tbody></table>

***

### ✅ Usage examples:

* "WELCOME20" — 20% off, stock 10,000, redemption type Unlimited per subscription, valid Jan–Dec 2025, applies to Invoice Amount
* "EARLYBIRD100" — Flat IDR 100,000 off, stock limited to 50, redemption Limited to 3 cycles, specific validity window
* "BASICONLY" — 15% off, applies to Selected Items (Basic Plan only), available to All members
  {% endtab %}

{% tab title="Tax" %}

### What is a Tax?

Tax is configured separately from the plan price and applied automatically on every invoice generated for a subscription — whether it is a new subscription, a renewal, or a one-off charge. Tax is always added on top of the plan price.

***

### View Tax List

Navigate to **Subscription and Billing → Collection → Tax** to see all configured taxes and their status.

<figure><img src="/files/3b4zRVo4Ru0UpOgfBeIb" alt=""><figcaption></figcaption></figure>

***

### Create Tax

{% stepper %}
{% step %}

#### Navigate to Tax

Navigate to **Subscription and Billing → Collection → Tax**
{% endstep %}

{% step %}

#### Start creating a tax

Click **Create Tax**

<figure><img src="/files/RPMzMhaOjDd5GO6YAFpG" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Fill in the tax details

Fill in the **Tax Name** — must be unique within your merchant account — and **Percentage Rate**
{% endstep %}

{% step %}

#### Save

Click **Save**
{% endstep %}
{% endstepper %}

***

### Edit Tax

{% stepper %}
{% step %}

#### Open the edit action

In the tax list, click the **⋮** icon on the tax to edit
{% endstep %}

{% step %}

#### Select Edit

Select **Edit**
{% endstep %}

{% step %}

#### Review editable fields

If the tax has **active subscriptions**: only the **Tax Name** can be edited

If the tax has **no active subscriptions**: all fields can be edited
{% endstep %}

{% step %}

#### Save

Click **Save**
{% endstep %}
{% endstepper %}

***

### View Detail

Click the **⋮** icon on a tax and select **See Detail** to view the full tax configuration — including the percentage rate and associated subscriptions.

***

### ✅ Usage examples:

* "VAT 11%" — applied to digital services collection
* "Service Tax 5%" — applied to professional services collection
  {% endtab %}
  {% endtabs %}

***

## Use Cases

{% tabs %}
{% tab title="Education" %}

<table><thead><tr><th width="150.6015625">Customer POV</th><th>Use Case Details</th></tr></thead><tbody><tr><td></td><td><p><strong>Description</strong> A school has several billing packages for regular students, boarding students, and students with extracurricular activities.</p><p></p><p><strong>Solution</strong> A single Collection "Tuition 2025" with multiple Plans: "Regular", "Boarding", and "Regular + Extracurricular" — each with its own price and cycle. Coupon "NEWSTUDENT10" gives new students 10% off for the first 3 months.</p><p></p><p><strong>How It Works</strong> Create Collection → add Plan per package → assign VAT 11% as tax → create welcome coupon → link to subscription per student.</p><p></p><p><strong>Features Used</strong> Collection, Plan (Flat Fee, Recurring), Tax, Coupon</p></td></tr></tbody></table>
{% endtab %}

{% tab title="ISP" %}

<table><thead><tr><th width="155.1796875">Customer POV</th><th>Use Case Details</th></tr></thead><tbody><tr><td></td><td><p><strong>Description</strong> An internet service provider needs to offer multiple bandwidth packages at different prices, plus a one-time installation fee.</p><p></p><p><strong>Solution</strong> Collection "Internet Packages" with recurring Plans per bandwidth tier (Flat Fee), plus a One-Off Charge Plan for the installation fee with a 12-month Access Period.</p><p></p><p><strong>How It Works</strong> Create Collection → add Plans per bandwidth → add "Installation Fee" as One-Off Charge Plan → customers subscribe to the appropriate plan.</p><p></p><p><strong>Features Used</strong> Collection, Plan (Flat Fee Recurring, One-Off Charge)</p></td></tr></tbody></table>
{% endtab %}
{% endtabs %}

## Merchant & Customer Experience

### Merchant View

Merchants configure the entire product structure from the DOKU Dashboard:

* Manage Collections at **Subscription and Billing → Collection → Collection**
* Manage Plans at **Subscription and Billing → Collection → Plan**
* Manage Taxes at **Subscription and Billing → Collection → Tax**
* Manage Coupons at **Subscription and Billing → Collection → Coupon**
* All configurations are immediately available when creating a Subscription

### Customer View

Customers do not interact directly with Collections or Plans. They only see the result of these configurations through:

* **Pricing Table** — the plan selection page shared by the merchant, where applicable coupons can be entered at checkout
* **Invoice** — which shows the plan name, applied coupon discount, applied tax, and total amount due

## Terms & Conditions

* A single subscription can only contain plans from **one Collection**
* Plans with active subscriptions **cannot be deleted** — they can only be deactivated
* Tax is **not included** in the plan price and is always added on top on the invoice
* Plan prices can be decimal values; for IDR currency, prices are **rounded up** on the invoice
* Coupons are scoped to a **specific Collection** — they cannot be applied across different collections
* Coupon stock is consumed on a first-come, first-served basis — once exhausted, no new subscriptions can redeem it
* A coupon with a limited redemption type stops applying automatically after the configured number of cycles — no manual action is needed

## FAQ

<details>

<summary>How many plans can be included in one subscription?</summary>

A single subscription can contain a maximum of **10 plans**, provided all plans come from the same Collection and have identical billing cycles.

</details>

<details>

<summary>What happens to existing subscriptions if a plan is deactivated?</summary>

Existing subscriptions are not affected — they continue renewing as usual. Deactivation only prevents new subscriptions from using that plan.

</details>

<details>

<summary>Can I change the price of a plan that already has active subscriptions?</summary>

No. If a plan has active subscriptions, only the name, image, and description can be edited. To change the price, duplicate the plan, update the price on the new plan, and use the new plan for future subscriptions.

</details>

<details>

<summary>What is the difference between One-Off Charge and Recurring Plan?</summary>

A **Recurring Plan** generates a new invoice automatically at every billing interval (e.g., every month) for the duration of the subscription. A **One-Off Charge** generates a single invoice only once — after payment, the customer has access for the configured **Access Period** (e.g., 3 months) and no further invoices are issued.

</details>

<details>

<summary>Is tax calculated before or after a coupon discount is applied?</summary>

Tax is always calculated after the coupon discount is applied. The invoice calculation order is: plan price → coupon discount deducted → subtotal → tax added on subtotal → final total.

</details>

<details>

<summary>Can a coupon be applied to only some plans in a subscription, not all?</summary>

Yes. When creating a coupon, set **Apply Coupon To** to **Selected Items** and specify which plans the discount applies to. Plans not selected are invoiced at their full price.

</details>

<details>

<summary>What happens when a coupon's stock runs out?</summary>

Once the stock limit is reached, the coupon is no longer available for new subscriptions to redeem. Subscriptions that have already applied the coupon continue to receive the discount for their configured redemption duration — existing redemptions are not affected.

</details>

<details>

<summary>Can I restrict a coupon to a specific member?</summary>

Yes. When creating a coupon, set the **Member** field to a specific member instead of **All**. Only that member's subscriptions will be able to apply the coupon.

</details>


# Create Subscription - Merchant Initiate

{% hint style="info" %}
This page is a tutorial for the **Subscriptions** feature. For a full feature overview → [Subscriptions](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions)
{% endhint %}

Learn how to create a subscription for a customer directly from the DOKU Dashboard. Use this method when the merchant is registering a customer to a plan on their behalf — for example, during walk-in registration, onboarding a new member, or migrating existing customers from a manual billing system.

## Interactive Demo

{% @supademo/embed demoId="cml7tx4md03272c0idmbvyj3f" url="<https://app.supademo.com/demo/cml7tx4md03272c0idmbvyj3f>" %}

## Prerequisites

Before creating a subscription, make sure the following are in place:

* [ ] FlexiBill is activated — [Activate FlexiBill](/subscription-and-billing/flexibill/activation)
* [ ] At least one active **Collection** and **Plan** exists — [Collection and Plan](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/collection-and-plan)
* [ ] The customer is registered as a **Member** in Member Center — [Member Center](/subscription-and-billing/flexibill/member-center)

## Step-by-Step Guide

{% stepper %}
{% step %}

### Open Create Subscription

1. Navigate to **Subscription and Billing** in the FlexiBill sidebar.
2. Select the **Subscription** tab.
3. Click the **Create Subscription** button in the top right corner of the page.

<figure><img src="/files/FkNP2PKt1EHpbRtGL3d6" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Select the Customer

On the **Customer Details** page, select the member from the **Member Name** dropdown.

<img src="/files/0Ejc0bKHH5SjlJDVCIju" alt="" height="217" width="624">

{% hint style="info" %}
If the customer is not yet registered as a member, click **Add Member** to register them without closing this form. Once saved, they will be immediately available in the dropdown.
{% endhint %}

Click **Next** to continue.
{% endstep %}

{% step %}

### Configure Subscription Details

On the **Subscription Details** page, fill in the following fields.

<img src="/files/J62BQnxeMMDRo5YQxZOj" alt="" height="395" width="624">

#### Plan Type

Select the plan type for this subscription:

<table><thead><tr><th width="152.89453125">Plan Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>Single Plan</strong></td><td>The customer subscribes to one plan item.</td></tr><tr><td><strong>Bundling Plan</strong></td><td>A combination of multiple plan items <em>(coming soon)</em>.</td></tr></tbody></table>

#### Subscription ID

Enable the **Autogenerate Subscription ID** toggle to let the system assign a unique ID automatically. Disable the toggle to enter a custom ID — alphanumeric characters only, no spaces or special characters.

#### Collection & Plan

<table><thead><tr><th width="125.7578125">Field</th><th width="108.71875">Required</th><th>Description</th></tr></thead><tbody><tr><td><strong>Collection</strong></td><td>Yes</td><td>Select the collection that contains the desired plan.</td></tr><tr><td><strong>Plan</strong></td><td>Yes</td><td>Select one or more plans from the chosen collection. A maximum of <strong>10 plans</strong> can be added — all selected plans must share the same billing cycle.</td></tr><tr><td><strong>Coupon</strong></td><td>Optional</td><td>Apply a discount coupon to this subscription. Only coupons that belong to the selected collection, are within their validity period, and still have available stock will appear in the dropdown. The discount applies from the first invoice — for a limited number of cycles or for the life of the subscription, depending on how the coupon was configured.</td></tr><tr><td><strong>Tax</strong></td><td>Optional</td><td>Add a tax configuration if the collection price does not already include tax. Tax is applied on top of the plan price on every invoice.</td></tr></tbody></table>

**Invoice calculation order:** Plan price → Coupon discount deducted → Subtotal → Tax applied on subtotal → **Final invoice total**

{% hint style="info" %}
Click **+ Add Plan** to create a new plan directly from this form without closing it. You will be redirected to the Create Plan form. Once saved, return here to select the newly created plan.
{% endhint %}

{% hint style="warning" %}
If no coupon appears in the dropdown, either no coupon has been created for the selected collection, or all available coupons have expired or run out of stock. → [Create a Coupon](broken://pages/fdd9b2f8c74b9ba16d5aba7f517fa8f7ee94e88b)
{% endhint %}

#### Subscription Duration

<table><thead><tr><th width="115.09765625">Field</th><th width="176.96875">Options</th><th>Description</th></tr></thead><tbody><tr><td><strong>Start Date</strong></td><td>Any date up to 1 year in the future</td><td>The date the subscription becomes active. <strong>Cannot be set to a past date.</strong> See behavior notes below.</td></tr><tr><td><strong>End Date</strong></td><td>Unlimited / Specific Date / After X Times</td><td>Determines when the subscription stops generating new invoices.</td></tr></tbody></table>

**Start Date behavior:**

<table><thead><tr><th width="161.15234375">Start Date Setting</th><th width="246.9453125">Invoice Issuance</th><th>Payment Deadline</th></tr></thead><tbody><tr><td><strong>Today</strong></td><td>Invoice is issued immediately upon subscription creation</td><td>Must be paid the same day (due upon receipt, or per invoice term)</td></tr><tr><td><strong>Future date</strong></td><td>Invoice is issued immediately but the subscription activates on the configured date</td><td>Must be paid before or on the start date</td></tr></tbody></table>

**End Date options:**

<table><thead><tr><th width="159.1640625">Option</th><th>Behavior</th></tr></thead><tbody><tr><td><strong>Unlimited</strong></td><td>The subscription remains active and continues generating invoices until the merchant manually ends it.</td></tr><tr><td><strong>Specific Date</strong></td><td>The subscription ends on the chosen calendar date. No invoice is issued after this date.</td></tr><tr><td><strong>After X Times</strong></td><td>The subscription ends after N billing cycles have been completed. Enter the number of cycles in the field provided.</td></tr></tbody></table>

Click **Next** to continue.
{% endstep %}

{% step %}

### Review and Confirm

Review the full subscription summary before confirming. The review page displays:

* Customer name, phone number, and email
* Selected collection and plan with pricing model
* Line-item breakdown including coupon discount (if applied) and tax
* Total amount per billing cycle
* Subscription start date and end condition

Click **Create Subscription** to confirm. The subscription is created immediately and the first invoice is issued according to the configured start date.
{% endstep %}
{% endstepper %}

## What's Next

After the subscription is created:

* 👉 [View Subscription Detail](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/view-subscription-detail) — Monitor subscription detail, invoice delivery status and payment status per subscription
* 👉 [Invoice and Receipt](/subscription-and-billing/flexibill/subscription-and-billing/invoice-and-receipt) — Learn how customers receive and pay their invoices
* 👉 [Create Subscription — Customer Initiate](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/create-subscription-customer-initiate) — Alternative: let customers subscribe themselves via a Pricing Table

## FAQ

<details>

<summary>Can I create a subscription without a Collection and Plan set up first?</summary>

No. A subscription must be linked to a Plan, which belongs to a Collection. Both must exist and be active before a subscription can be created. If no plan exists yet, click **+ Add Plan** during Step 3 to create one without leaving the subscription form. → [Collection and Plan](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/collection-and-plan)

</details>

<details>

<summary>What happens if the customer I want to subscribe is not in the Member dropdown?</summary>

The customer must be registered as a Member in Member Center first. Click **Add Member** directly from the Customer Details step (Step 2) to register them on the spot — the form opens without closing the subscription flow. Once saved, the new member appears immediately in the dropdown.

</details>

<details>

<summary>Can I assign a custom Subscription ID instead of an auto-generated one?</summary>

Yes. Disable the **Autogenerate Subscription ID** toggle in Step 3 and enter your preferred ID. Custom IDs must be alphanumeric — no spaces or special characters. Custom IDs are useful when you need to match a subscription to an existing record in your internal system.

</details>

<details>

<summary>What is the maximum number of plans I can add to a single subscription?</summary>

A maximum of **10 plans** can be added to one subscription. All selected plans must belong to the same collection and must share the same billing cycle — you cannot combine a monthly plan with a yearly plan in the same subscription.

</details>

<details>

<summary>Can I set a start date in the past?</summary>

No. The start date cannot be set to a date before today. If you need to backdate a subscription, the earliest available start date is today. The system generates the invoice immediately upon subscription creation regardless of whether the start date is today or a future date.

</details>

<details>

<summary>What is the difference between setting the start date to today versus a future date?</summary>

When the start date is **today**, the invoice is issued immediately and the customer must pay it the same day (or within the invoice term configured in the collection). When the start date is a **future date**, the invoice is also issued immediately, but the subscription only activates on the configured date — giving the customer time to pay before the service begins. The payment deadline follows the collection's Invoice Term settings.

</details>

<details>

<summary>What happens when a subscription set to "After X Times" reaches its limit?</summary>

Once the configured number of billing cycles is completed, the subscription automatically ends — no further invoices are generated. The subscription status transitions to **Expired**. The customer's existing paid invoices and receipts remain accessible, but no new billing occurs. To continue billing the customer, a new subscription must be created.

</details>

<details>

<summary>Can I apply a coupon when creating a subscription?</summary>

Yes. The **Coupon** field appears in the Collection & Plan section of Step 3 and is optional. Only coupons that belong to the selected collection, are within their validity period, and still have available stock will appear in the dropdown.

Once applied, the coupon discount is reflected in the invoice starting from the first billing cycle. How long the discount continues depends on the coupon's redemption type:

* **Unlimited** — discount applies on every invoice for the life of the subscription
* **Limited** — discount applies for the configured number of cycles, then stops automatically

The discount is always applied before tax. → [Collection and Plan — Coupons](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/collection-and-plan#create-coupons-optional)

</details>

<details>

<summary>Why is no coupon available in the dropdown?</summary>

The coupon dropdown only shows coupons that meet all of the following conditions at the time of subscription creation:

* The coupon belongs to the **selected collection**
* The coupon is within its **validity period** (start date has passed, end date has not)
* The coupon still has **available stock**
* The coupon is **active** (not deactivated)

If the dropdown is empty, check that a coupon has been created for the selected collection and that it has not expired or run out of stock. → [Create a Coupon](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/collection-and-plan#create-coupons-optional)

</details>

<details>

<summary>Can I edit a subscription after it has been created?</summary>

Certain subscription settings — such as the plan, billing cycle, and collection — cannot be changed after creation. To move a customer to a different plan, end the current subscription and create a new one on the target plan with the appropriate start date. Basic information such as the subscription label or reference may be editable depending on the current subscription status.

</details>

<details>

<summary>What happens to the subscription if the first invoice is not paid by the due date?</summary>

If the customer does not pay by the due date, the invoice transitions to **Overdue** status. If a grace period is configured on the collection, the customer can still pay within that window without penalty and the subscription remains active. Once the grace period ends without payment, the subscription moves to **Expired** status and no further invoices are issued. You can monitor overdue invoices in the Billing Summary. → [View Subscription Billing](broken://pages/b3cd86dfd3d363b02113bdcdb3e322b5813d7d24)

</details>

<details>

<summary>How does the customer receive their invoice?</summary>

The invoice is delivered to the customer automatically via **Email**, based on the delivery channel configured in the collection. The invoice contains a unique payment link for that billing cycle. → [Invoice and Receipt](broken://pages/66e01c80c7f59b08fe13ca3989c811c601695492)

</details>

<details>

<summary>Is this the only way to create a subscription?</summary>

No. There are two other methods. The **Customer Initiate** method allows customers to browse plans and subscribe themselves through a shareable Pricing Table — no merchant action needed per customer. The **Bulk Bill Upload** method allows processing a large roster of customers simultaneously from a structured CSV/XLSX file. → [Create Subscription — Customer Initiate](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/create-subscription-customer-initiate) | [Create Bulk Subscription](/subscription-and-billing/flexibill/subscription-and-billing/billing/create-bulk-subscription)

</details>


# Create Subscription - Customer Initiate

A **Pricing Table** is a customizable plan selection page that merchants can share with customers via a direct URL or embed on a website. Customers can browse available plans, select the one they want, and subscribe entirely on their own — without any direct action from the merchant.

## Features & Benefits

**🌐 Shareable & Embeddable**

Distribute your Pricing Table via a direct URL or embed it as a component on your website using the HTML snippet provided in the dashboard.

**🎨 Fully Customizable Appearance**

Tailor the look of your Pricing Table to match your business branding — title, subtitle, button color, font color, and a featured plan highlight.

**🛒 Self-Serve Customer Journey**

Customers complete the entire process — from plan selection to the first payment — independently, without needing to contact the merchant.

## How It Works

{% stepper %}
{% step %}

#### **Merchant Creates Pricing Table**

<figure><img src="/files/BexEiDovpR1wpKKjgEOi" alt=""><figcaption></figcaption></figure>

Merchant creates a Pricing Table from the dashboard, configuring plans, appearance, and coupons
{% endstep %}

{% step %}

#### **Customer Selects Plan**

<figure><img src="/files/7NzyO5cpAJJfvUQ9yzIH" alt=""><figcaption></figcaption></figure>

Customer opens the URL or embedded page, selects a plan, and fills in their detail
{% endstep %}

{% step %}

#### **Customer Completes Payment**

<figure><img src="/files/BEty9RvXrLPwb4dDqDCo" alt=""><figcaption></figcaption></figure>

Customer completes the first payment — subscription is activated and future invoices run automatically

{% hint style="info" %}
🎬 **Want to see it in action?** Try the interactive demo before diving into the details. [Launch Demo](https://app.supademo.com/demo/cmocn2xxp00ze070je6tzw8t3?utm_source=link)
{% endhint %}
{% endstep %}
{% endstepper %}

## Capability Details

### Accessing Pricing Table

Navigate to the Pricing Table list to manage all Pricing Tables under your merchant account.

1. Navigate to **Subscription and Billing** in the left sidebar
2. Select the **Collection** section
3. Click the **View Pricing Table** button

<figure><img src="/files/j7zSSGdE3vk954tHPpHT" alt=""><figcaption></figcaption></figure>

The list displays the following information for each Pricing Table:

<table><thead><tr><th width="187.140625">Column</th><th>Description</th></tr></thead><tbody><tr><td><strong>Pricing Table Name</strong></td><td>The internal name assigned to the Pricing Table</td></tr><tr><td><strong>Status</strong></td><td>Current state — <strong>Active</strong> or <strong>Inactive</strong></td></tr><tr><td><strong>URL</strong></td><td>Direct shareable link — click the copy icon to copy it instantly</td></tr><tr><td><strong>Created Date</strong></td><td>The date the Pricing Table was created</td></tr></tbody></table>

Use the **Search** field to find a table by name, or the **Filter** to sort by Created Date.

***

### Create Pricing Table

Create a new Pricing Table to enable customers to self-subscribe to your plans.

**Prerequisites**

Before creating a Pricing Table, ensure the following are already set up:

* At least one active **Collection** and **Plan** → Collection and Plan
* *(Optional)* **Coupons** and **Tax** configured for the collection, if you want to include them

***

**Step 1 of 2 — General Information**

1. From the Pricing Table list, click **Create Pricing Table**
2. Fill in the collection and plan configuration:

<table><thead><tr><th width="197.8984375">Field</th><th width="108.63671875">Required</th><th width="500.01171875">Description</th></tr></thead><tbody><tr><td><strong>Pricing Table Name</strong></td><td>✅</td><td>A unique name to identify this Pricing Table — for internal use only</td></tr><tr><td><strong>Collection</strong></td><td>✅</td><td>Select the collection containing the plans to display</td></tr><tr><td><strong>Plans</strong></td><td>✅</td><td>Select plans to include — maximum <strong>10 plans</strong> per Pricing Table</td></tr><tr><td><strong>Group by Frequency</strong></td><td>➖</td><td>Toggle on to organize plans into tabs by billing cycle (e.g., Daily, Monthly, Yearly)</td></tr><tr><td><strong>Highlighted Plan</strong></td><td>➖</td><td>Mark one plan as featured — shown with a <strong>"Best Offer"</strong> badge. Only one plan can be highlighted</td></tr></tbody></table>

> Only plans from the selected Collection are available. If the plan you need is not listed, create it first → Collection and Plan&#x20;

**Appearance Settings**

Customize how the Pricing Table looks to your customers. Use the **Preview Pane** on the right to see changes in real time.

<table><thead><tr><th width="126.51171875">Field</th><th width="179.8671875">Limit</th><th>Description</th></tr></thead><tbody><tr><td><strong>Title</strong></td><td>Max 50 characters</td><td>Main heading shown at the top of the Pricing Table page</td></tr><tr><td><strong>Subtitle</strong></td><td>Max 256 characters</td><td>Supporting text shown below the title</td></tr><tr><td><strong>Button Text</strong></td><td>Max 50 characters</td><td>Label on the subscribe call-to-action button</td></tr><tr><td><strong>Button Color</strong></td><td>Custom hex color</td><td>Background color of the subscribe button</td></tr><tr><td><strong>Font Color</strong></td><td>Custom hex color</td><td>Text color used across the Pricing Table</td></tr></tbody></table>

<figure><img src="/files/I21asGh6Y8GUSIuYmkK9" alt=""><figcaption></figcaption></figure>

Click **Next** to continue.

***

**Step 2 of 2 — Additional Details**

Configure optional promotions and tax. The **Preview Pane** updates automatically as you select coupons.

<table><thead><tr><th width="175.60546875">Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>Coupons</strong> <em>(Optional)</em></td><td>Select coupons from the linked Collection — maximum <strong>10 coupons</strong>. Selected coupons will be available for customers to enter at checkout</td></tr><tr><td><strong>Taxes</strong> <em>(Optional)</em></td><td>Select a pre-configured tax to apply to all plans in this Pricing Table</td></tr></tbody></table>

<figure><img src="/files/zZ7E9uPLsluHCsLS5Nze" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
[Tax is calculated **after** any coupon discount is applied. Calculation order: **Plan price → Coupon discount → Subtotal → Tax → Total**](#user-content-fn-1)[^1]
{% endhint %}

Click **Submit** to create the Pricing Table. The table appears in the list immediately and its shareable URL is available right away from the **Integration** tab.

✅ Usage examples:

* Pricing Table *"Gym Plans 2025"* — Basic, Pro, and VIP plans grouped by monthly billing cycle
* Pricing Table *"Course Packages"* — One plan per course type with a one-time charge

***

### View Pricing Table Detail

Open the detail view of an existing Pricing Table to review its configuration, access the shareable URL, or copy the embed code.

1. Navigate to **Subscription and Billing → Collection → View Pricing Table**
2. Click the **⋮** icon on the desired Pricing Table
3. Select **See Details**

The **Pricing Table Details** panel opens and is organized into four tabs:

{% stepper %}
{% step %}

#### **Integration**

Contains the distribution options for this Pricing Table.

Click the **copy icon** next to the URL or embed code to copy it to your clipboard instantly.

{% hint style="info" %}
The URL is live as soon as the Pricing Table is created — no additional publishing step is needed.
{% endhint %}

<table><thead><tr><th width="168.36328125">Item</th><th>Description</th></tr></thead><tbody><tr><td><strong>Pricing Table URL</strong></td><td>A direct shareable link — send to customers via email, WhatsApp, or any channel</td></tr></tbody></table>

<figure><img src="/files/wEwwvP1SByZeQXAjT2wC" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Plan

Displays all plans included in this Pricing Table.

| Column           | Description                                          |
| ---------------- | ---------------------------------------------------- |
| **Plan Name**    | The name of the plan as configured in the Collection |
| **Plan Type**    | Single Plan or other plan type                       |
| **Billing Type** | Recurring or One-Off Charge                          |
| **Price**        | The price per billing cycle                          |

<figure><img src="/files/dbECPKeL0ExqjdpEFTof" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Appearance

Displays the visual configuration applied to this Pricing Table.

<table><thead><tr><th width="140.984375">Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>Title</strong></td><td>Main heading displayed on the customer-facing page</td></tr><tr><td><strong>Subtitle</strong></td><td>Supporting text shown below the title</td></tr><tr><td><strong>Button Text</strong></td><td>Label on the subscribe button</td></tr><tr><td><strong>Button Color</strong></td><td>Hex color of the subscribe button</td></tr><tr><td><strong>Font Color</strong></td><td>Hex color of text across the page</td></tr><tr><td><strong>Font</strong></td><td>Font style applied across the page</td></tr></tbody></table>

<figure><img src="/files/mJiLVyrXgLVNQlUiICdW" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Additional Details

Displays the coupon and tax settings associated with this Pricing Table.

<table><thead><tr><th width="104.19140625">Section</th><th>Description</th></tr></thead><tbody><tr><td><strong>Coupon</strong></td><td>Lists coupons available for customers to apply at checkout. Shows <em>"No coupons available"</em> if none were configured</td></tr><tr><td><strong>Tax</strong></td><td>Displays the tax name and percentage rate applied (e.g., PPN 11%)</td></tr></tbody></table>

<figure><img src="/files/4Zwk1IKLWZL8crUQIwpE" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

***

## Customer Journey: How Customers Access the Pricing Table

This section describes the end-to-end experience a customer goes through — from opening the Pricing Table link to receiving their payment receipt.

{% stepper %}
{% step %}

### Open the Pricing Table

The customer opens the URL shared by the merchant, or accesses the Pricing Table embedded on the merchant's website.

The Pricing Table displays plan cards. If **Group by Frequency** is enabled, plans are organized into tabs by billing cycle (e.g., **Daily**, **Monthly**, **One Off Charge**). A plan marked **Best Offer** is highlighted to guide the customer toward the featured option.

<figure><img src="/files/TcajMQdwpRsjDXswt0bV" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Select Plan and Coupon

The customer selects the plan they want by clicking **Subscribe** on the plan card.

Where applicable, the customer can adjust the **quantity** using the **−** and **+** controls. The total price updates automatically.

If the merchant has configured coupons for this Pricing Table, a coupon field is available on the checkout page. The customer can:

1. Enter a **coupon code** in the coupon search field
2. Click **Apply** on the desired coupon — either **fixed discount** or **percentage discount**
3. The discount is applied immediately and the **Total** updates to reflect the reduced amount

<figure><img src="/files/8706rvHlgJjVXyh1uDoN" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Only coupons configured by the merchant for this specific Pricing Table are accepted. Expired or out-of-stock coupons cannot be applied.
{% endhint %}
{% endstep %}

{% step %}

### Review Checkout Confirmation

The customer reviews the full order summary on the **Checkout Confirmation** page.

<table><thead><tr><th width="171.24609375">Item</th><th>Description</th></tr></thead><tbody><tr><td><strong>Plan name &#x26; price</strong></td><td>The selected plan and its price per cycle</td></tr><tr><td><strong>Quantity</strong></td><td>Adjustable here as well using − / +</td></tr><tr><td><strong>Coupon</strong></td><td>Total Discount appiled</td></tr><tr><td><strong>Subtotal</strong></td><td>Plan price × quantity - Discount</td></tr><tr><td><strong>Tax</strong></td><td>Applied tax, if configured (e.g., PPN 11.00%)</td></tr><tr><td><strong>Total</strong></td><td>Final amount due</td></tr></tbody></table>
{% endstep %}

{% step %}

### Enter Email and Verify via OTP

The **Member Details** modal appears. The customer enters their **email address** and clicks **Check**.

The system sends a **One-Time Password (OTP)** to that email. The customer enters the OTP to verify their address. This verified email is used for all future invoices, billing notifications, and payment receipts.

<figure><img src="/files/hiapldUz1TyzNGw7lCs5" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Returning customer?** If the email is already registered, the system recognizes the customer and links the new subscription to the existing member account — no need to re-enter personal details.
{% endhint %}
{% endstep %}

{% step %}

### Fill In Personal Details

After OTP verification, the customer completes their personal information:

| Information   | Information  |
| ------------- | ------------ |
| Name          | Phone Number |
| Date of Birth | Address      |
| Province      | City         |
| Postal Code   |              |

Once complete, the customer clicks **Choose Payment Method**.

<figure><img src="/files/1cbr9zTQNcx7tqfTgeVn" alt=""><figcaption></figcaption></figure>

{% endstep %}

{% step %}

### Select Payment Method

The customer selects their preferred payment method to complete the first payment.

**Enroll in Auto-Debit&#x20;*****(Optional)***

On the **Invoice** page, the customer can toggle **Enroll in Auto-debit** to enable automatic billing on future cycles.

<table><thead><tr><th width="166.0625">Setting</th><th>What Happens</th></tr></thead><tbody><tr><td><strong>Enabled</strong></td><td>Future invoices are charged automatically on the due date — no manual action needed each cycle</td></tr><tr><td><strong>Disabled</strong> <em>(default)</em></td><td>Invoices are issued each cycle but must be paid manually</td></tr></tbody></table>

When enabled, a confirmation appears: *"Auto-debit is enabled. Your future invoices will be paid automatically on the due date."*

The customer then clicks **Schedule Your Payment** to complete the first payment.

<figure><img src="/files/RbWW4Z30KqAIUy899yBg" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Receive Payment Receipt

After a successful payment, the system automatically sends a **Payment Receipt** to the customer's registered email.

The receipt includes:

<table><thead><tr><th width="175.0234375">Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>Subscription ID</strong></td><td>Unique identifier for the subscription</td></tr><tr><td><strong>Receipt ID</strong></td><td>Unique identifier for this payment transaction</td></tr><tr><td><strong>Member ID</strong></td><td>The customer's member account ID</td></tr><tr><td><strong>Amount Paid</strong></td><td>Total amount charged</td></tr><tr><td><strong>Payment Date</strong></td><td>Date the payment was processed</td></tr><tr><td><strong>Payment Method</strong></td><td>Channel used (e.g., Virtual Account Bank Mandiri)</td></tr><tr><td><strong>Line items</strong></td><td>Plan name, tax, and total breakdown</td></tr><tr><td><strong>Status</strong></td><td><strong>Paid</strong></td></tr></tbody></table>

<figure><img src="/files/AxLz0vVxJgSXP1Av6Skm" alt=""><figcaption></figcaption></figure>

The subscription is now active. Future invoices are issued automatically on schedule and delivered to the registered email.
{% endstep %}
{% endstepper %}

***

## Merchant & Customer Experience

### Merchant View

* Create and manage Pricing Tables at **Subscription and Billing → Collection → View Pricing Table**
* Copy the shareable URL or embed code from the **Integration** tab in the Pricing Table detail
* Monitor subscriptions created by customers under the **Subscription** tab

### Customer View

* Access the Pricing Table via the shared URL or on the merchant's website
* Browse and select a plan, adjust quantity if applicable
* Enter email address and verify via OTP
* Fill in personal details and choose a payment method
* Optionally activate auto-debit for automatic future billing
* Receive a Payment Receipt at the registered email after successful payment

***

## Terms & Conditions

* Maximum **10 plans** per Pricing Table
* Only **1 plan** can be highlighted as the featured plan
* Available coupons are limited to those from the selected Collection — maximum **10 coupons** per Pricing Table
* Customers must verify their email via OTP before completing the subscription
* Customers can apply a maximum of **5 coupons** per checkout
* Each customer can only have **1 active subscription** per plan at a time — a new subscription to the same plan can only be created after the existing one has ended
* If the customer's email is already registered, the new subscription is linked to the existing member account
* Tax is calculated after any coupon discount is applied

***

## FAQ

<details>

<summary>Can the Pricing Table be embedded on a website outside of DOKU?</summary>

Yes. The **Integration** tab in the Pricing Table detail provides an **url** that can be added to any website.

</details>

<details>

<summary>Can the same customer subscribe more than once through the Pricing Table?</summary>

Yes. If a customer enters the same email used in a previous subscription, the system recognizes them as an existing member and links the new subscription to the same member account.

</details>

<details>

<summary>Can I limit which coupons appear on a specific Pricing Table?</summary>

Yes. When creating a Pricing Table, you select which coupons (up to 10) from the linked Collection are available for customers to apply at checkout. Coupons not selected will not appear on that Pricing Table.

</details>

<details>

<summary>If I did not activate auto-debit at checkout, can I activate it on the next billing cycle?</summary>

Yes. Auto-debit can be activated at any time from the invoice page — it does not have to be enabled during the initial checkout. Once activated, automatic payment will apply starting from the next billing cycle. The subscription itself remains active regardless of whether auto-debit is on or off.

</details>

<details>

<summary>Can a customer apply a coupon when subscribing through the Pricing Table?</summary>

Yes, if the merchant has configured coupons for the Pricing Table. The customer can enter a coupon code at the checkout step. The discount is applied immediately and reflected in the order summary before payment.

</details>

[^1]:


# View Subscription Detail

{% hint style="info" %}
This page covers **Subscription Detail** — viewing the full configuration and billing history of a single subscription. To monitor all invoices across all subscriptions → [View Subscription Billing](/subscription-and-billing/flexibill/subscription-and-billing/billing/view-subscription-billing)
{% endhint %}

The **Subscription Detail** page gives merchants a complete view of a single subscription — its configuration, the member it belongs to, the plans, coupon, and tax registered to it, and the full billing history with per-invoice payment status.

## How to Open Subscription Detail

1. Navigate to **Subscription and Billing → Subscription** from the FlexiBill sidebar.
2. Locate the subscription in the subscription list.
3. Click **⋮** icon on the subscription row to open its detail page.

<figure><img src="/files/7TTowD9EEIUw7JcS40cR" alt=""><figcaption></figcaption></figure>

## Subscription Detail

### Subscription Header Section

The top of the detail page shows the subscription's high-level identity at a glance:

<table><thead><tr><th width="209.48046875">Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>Subscription Name</strong></td><td>The name of the collection or service this subscription is tied to (e.g., "Digital Crypto Class").</td></tr><tr><td><strong>Subscription ID</strong></td><td>The unique identifier for this subscription (e.g., <code>SUB26000026</code>). Click the copy icon to copy it to clipboard.</td></tr><tr><td><strong>Status</strong></td><td>The current lifecycle state of the subscription. See <a href="#subscription-status">Subscription Status</a> below.</td></tr><tr><td><strong>Start Date</strong></td><td>The date the subscription became or becomes active.</td></tr><tr><td><strong>Next Billing Date</strong></td><td>The date the next invoice will be issued. Blank if the subscription has ended.</td></tr><tr><td><strong>Total Amount</strong></td><td>The total amount charged per billing cycle, including any applied tax and after any coupon discount.</td></tr></tbody></table>

#### Subscription Status

<table><thead><tr><th width="135.51171875">Status</th><th width="301.91796875">What It Means</th><th>Recommended Action</th></tr></thead><tbody><tr><td><strong>Created</strong></td><td>Subscription exists but the first invoice has not yet been issued — typically because the start date has not arrived yet</td><td>No action needed — the invoice will be issued automatically on the start date</td></tr><tr><td><strong>Future Active</strong></td><td>Subscription is confirmed and scheduled to start on a future date</td><td>No action needed — monitor until the start date arrives and the first invoice is issued</td></tr><tr><td><strong>Pending</strong></td><td>Invoice has been issued and delivered — awaiting payment from the customer</td><td>Monitor — follow up with the customer if payment is approaching the due date</td></tr><tr><td><strong>Active</strong></td><td>Customer has paid and the subscription is running normally</td><td>No action needed — the next cycle bill will be created automatically</td></tr><tr><td><strong>Expired</strong></td><td>Invoice was not paid within the grace period — the subscription is no longer active</td><td>Follow up with the customer — create a new subscription if they wish to re-enroll</td></tr></tbody></table>

### Subscription Details Section

The **Subscription Details** section displays the billing configuration inherited from the Collection and Plan at the time of subscription creation.

<table><thead><tr><th width="163.09375">Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>Subscription ID</strong></td><td>The unique subscription identifier.</td></tr><tr><td><strong>Billing Cycle</strong></td><td>How frequently invoices are issued (e.g., Every 1 day, Every 1 month).</td></tr><tr><td><strong>Start Date</strong></td><td>The date the subscription was activated.</td></tr><tr><td><strong>End Date</strong></td><td>The end condition — either a specific date, after a set number of billing cycles (e.g., "After 5 Times"), or Unlimited.</td></tr><tr><td><strong>Invoice Term</strong></td><td>The payment window between invoice issuance and the due date (e.g., 7 days). Inherited from the Collection.</td></tr><tr><td><strong>Grace Period</strong></td><td>The buffer period after the due date before the subscription is marked as expired for non-payment (e.g., 0 days). Inherited from the Collection.</td></tr></tbody></table>

### Member Details Section

The **Member Details** section shows the customer linked to this subscription.

<table><thead><tr><th width="159.203125">Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>Member ID</strong></td><td>The unique member identifier in Member Center (e.g., <code>CST-0009-1777533480098</code>).</td></tr><tr><td><strong>Member Name</strong></td><td>The customer's full name. Click the name to open the member's profile in Member Center.</td></tr><tr><td><strong>Email</strong></td><td>The email address invoices and receipts are delivered to.</td></tr><tr><td><strong>Phone Number</strong></td><td>The customer's registered contact number.</td></tr></tbody></table>

{% hint style="info" %}
Click the **Member Name** link to open the member's full profile in Member Center — including their group membership, labels, and any custom form data.
{% endhint %}

### Item Details Section

The **Item Details** section lists the plans, coupon, and tax registered to this subscription. These reflect the configuration set at the time of subscription creation.

#### Plans

<table><thead><tr><th width="131.4609375">Column</th><th>Description</th></tr></thead><tbody><tr><td><strong>Plan Name</strong></td><td>The name of the plan included in this subscription.</td></tr><tr><td><strong>Qty</strong></td><td>The quantity unit for this plan (relevant for Per Unit pricing models).</td></tr><tr><td><strong>Price</strong></td><td>The plan's base price per billing cycle.</td></tr></tbody></table>

Multiple plans appear as separate rows if the subscription was created with more than one plan.

#### Coupon

<table><thead><tr><th width="143.484375">Column</th><th>Description</th></tr></thead><tbody><tr><td><strong>Coupon Name</strong></td><td>The name of the coupon applied to this subscription.</td></tr><tr><td><strong>Price</strong></td><td>The discount value — displayed as a percentage (e.g., <code>3%</code>) for percentage-type coupons, or as a flat amount for flat-type coupons.</td></tr></tbody></table>

If no coupon was applied at subscription creation, this section is not displayed.

{% hint style="info" %}
The coupon discount is applied per billing cycle according to the coupon's redemption type. Once the redemption limit is reached, the coupon row remains visible in Item Details but the discount no longer applies to new invoices.
{% endhint %}

#### Tax

<table><thead><tr><th width="142.109375">Column</th><th>Description</th></tr></thead><tbody><tr><td><strong>Tax Name</strong></td><td>The name of the tax configuration applied to this subscription (e.g., <code>SST</code>).</td></tr><tr><td><strong>Tax Rate</strong></td><td>The tax percentage applied on the post-discount subtotal (e.g., <code>8%</code>).</td></tr></tbody></table>

If no tax was configured on the collection, this section is not displayed.

**Invoice calculation order for this subscription:**

> Plan price(s) → Coupon discount deducted → Subtotal → Tax applied on subtotal → **Total Amount per cycle**

### Billing List Section

The **Billing List** shows every invoice issued from this subscription, in reverse chronological order. Each row represents one billing cycle.

#### Billing List Columns

<table><thead><tr><th width="178.7421875">Column</th><th>Description</th></tr></thead><tbody><tr><td><strong>Invoice ID</strong></td><td>The unique identifier for the invoice (e.g., <code>INV-SUB26000026-Py08N</code>).</td></tr><tr><td><strong>Billing Date</strong></td><td>The date the invoice was issued.</td></tr><tr><td><strong>Amount Due</strong></td><td>The total amount the customer is required to pay for this cycle.</td></tr><tr><td><strong>Payment Method</strong></td><td>The payment method used to settle this invoice (e.g., <code>CREDIT_CARD</code>). Blank if unpaid.</td></tr><tr><td><strong>Status</strong></td><td>The current payment condition of this invoice. See <a href="#invoice-status">Invoice Status</a> below.</td></tr></tbody></table>

#### Invoice Status

<table><thead><tr><th width="168.22265625">Status</th><th>Description</th></tr></thead><tbody><tr><td><strong>Paid</strong></td><td>The customer has completed payment for this invoice.</td></tr><tr><td><strong>Unpaid</strong></td><td>The invoice has been issued and delivered, and is awaiting payment. The due date has not yet passed.</td></tr><tr><td><strong>Overdue</strong></td><td>The invoice due date has passed without payment. If a grace period is configured, the subscription remains active until the grace period also expires.</td></tr></tbody></table>

#### Searching and Filtering the Billing List

<table><thead><tr><th width="209.203125">Control</th><th>Description</th></tr></thead><tbody><tr><td><strong>Search by Invoice ID</strong></td><td>Enter a full or partial invoice ID to locate a specific invoice.</td></tr><tr><td><strong>Search by Billing Date</strong></td><td>Filter invoices by the date they were issued.</td></tr><tr><td><strong>Select Billing Status</strong></td><td>Filter the list by invoice status — Paid, Unpaid, or Overdue.</td></tr></tbody></table>

#### Pagination

Use the **items per page** selector in the bottom left to control how many invoices are displayed per page (default: 10). Navigate between pages using the pagination controls in the bottom right, which display the total number of entries.

***

## Merchant & Customer Experience

#### Merchant View

From the Subscription Detail page, merchants can:

* Verify the full configuration of a subscription — billing cycle, invoice term, grace period, and end condition
* Confirm which member is linked and navigate directly to their profile
* See exactly which plans, coupon, and tax are registered — and cross-check the total amount per cycle against the invoice calculation order
* Monitor the billing history for this subscription: which invoices have been paid, which are pending, and which are overdue
* Take action on overdue invoices by navigating to the invoice detail from the Billing List

#### Customer View

Customers do not have access to this page. They interact with the subscription only through:

* **Invoices** delivered via email or WhatsApp for each billing cycle
* **Receipts** delivered after each successful payment

## FAQ

<details>

<summary>How do I get to the Subscription Detail page?</summary>

Navigate to **Subscription and Billing → Subscription** in the FlexiBill sidebar, then click any subscription row in the list to open its detail page.

</details>

<details>

<summary>What does the "Next Billing Date" field mean?</summary>

Next Billing Date is the date the system will automatically issue the next invoice for this subscription. If the subscription has ended (status: Expired or Canceled), this field is blank — no further invoices will be generated.

</details>

<details>

<summary>Why is the Total Amount different from the plan price I configured?</summary>

The Total Amount reflects the final per-cycle charge after applying the coupon discount and adding tax. The calculation order is: plan price → coupon discount deducted → subtotal → tax applied on subtotal → Total Amount. You can verify each component in the Item Details section — Plans, Coupon, and Tax are listed separately.

</details>

<details>

<summary>The coupon is still shown in Item Details but the latest invoice was not discounted. Why?</summary>

If the coupon was configured with a **Limited** redemption type, the discount only applies for a set number of billing cycles. Once that limit is reached, the coupon stops applying automatically — but it remains visible in Item Details as a record of what was registered at subscription creation. Check the coupon's redemption settings under **Subscription and Billing → Collection → Coupon** to confirm.

</details>

<details>

<summary>Can I edit the subscription configuration from this page?</summary>

No. The Subscription Detail page is read-only. Plan, coupon, tax, billing cycle, and collection settings cannot be changed after a subscription is created. To move a customer to a different plan or configuration, end the current subscription and create a new one. → [Create Subscription — Merchant Initiate](/subscription-and-billing/flexibill/subscription-and-billing/subscriptions/create-subscription-merchant-initiate)

</details>

<details>

<summary>What happens when a subscription reaches "After X Times" and all invoices are paid?</summary>

Once the configured number of billing cycles is complete, the subscription status transitions to **Expired** automatically. No further invoices are issued. All invoices in the Billing List will show **Paid** status. The subscription record and its full billing history remain accessible — no data is deleted.

</details>

<details>

<summary>How do I see more detail about a specific invoice in the Billing List?</summary>

Click any invoice row in the Billing List to open the invoice detail page. From there you can view the full payment details, activity log, checkout link, and receipt information for that specific billing cycle. → [View Subscription Billing](/subscription-and-billing/flexibill/subscription-and-billing/billing/view-subscription-billing)

</details>

<details>

<summary>Can I see subscriptions for all members from this page, or only one at a time?</summary>

The Subscription Detail page shows one subscription at a time. To view all subscriptions across all members, return to the subscription list at **Subscription and Billing → Subscription**. Use the search and filter controls there to narrow by member, status, or date range.

</details>


# Cancel Subscription

This page covers the **Cancel Subscription** feature. This feature lets a merchant end a customer's subscription so no further invoices are generated from that point on. A subscription can be cancelled one at a time from the subscription list, or in bulk when several **Active** subscriptions need to be ended together. Every cancellation captures a **Cancellation Reason**, giving merchants a structured record for churn analysis and reporting.

#### 🔂 Individual & Bulk Cancellation

Cancel a single subscription directly from its row using the three-dot (**More Actions**) menu, or select multiple subscriptions with an "Active" status and cancel them together in one action using the table-level **Action** button.

#### 📋 Structured Cancellation Reason

Every cancellation — individual or bulk — requires the merchant to select a Cancellation Reason from a predefined list before the action is confirmed. This keeps cancellation data consistent and analyzable across the merchant account.

#### ⚡ Cancel Immediately

The available Cancellation Type is **Cancel Immediately**, which ends the subscription as soon as the action is confirmed.

#### 🛡️ Confirmation Safeguard

A confirmation modal stands between the merchant and the cancellation. The merchant must actively choose a reason and click **Cancel Subscription** to proceed — or click **Keep Subscription** to back out without making any change.

#### ✅ Active-Only Bulk Selection

Bulk cancellation is intended for subscriptions currently in "Active" status. Selecting subscriptions by this status before applying the bulk Action helps prevent accidentally acting on subscriptions that are already Expired.

## How It Works

{% stepper %}
{% step %}

### Navigate to Subscriptions

Go to `Subscription and Billing → Subscription` to view the full subscription list.
{% endstep %}

{% step %}

### Choose the cancellation scope

Use the three-dot icon on a single row for one subscription, or check the boxes next to several "Active" subscriptions for a bulk action.
{% endstep %}

{% step %}

### Select Cancel

Choose **Cancel** from the row's More Actions dropdown, or from the **Action** button above the table for a bulk selection.
{% endstep %}

{% step %}

### Select a Cancellation Reason

In the confirmation modal, choose the reason that best matches the customer's situation.
{% endstep %}

{% step %}

### Confirm

Click **Cancel Subscription** to finalize, or **Keep Subscription** to close the modal without cancelling.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
**Example:** Merchant "hazim" cancels subscription `SUB26000003` for member Hasnim, selecting **"Unsatisfactory experience"** as the Cancellation Reason.
{% endhint %}

## Capability Details

{% tabs %}
{% tab title="Cancellation" %}

#### What is a Cancellation?

A Cancellation ends a customer's subscription. Once confirmed, the subscription stops generating new invoices going forward. Cancellation is available for subscriptions listed under `Subscription and Billing → Subscription`.

#### Cancellation Type

The confirmation modal presents a **Cancellation Type** field. Currently available:

* **Cancel Immediately** — The subscription is ended as soon as the merchant confirms the action — no further billing cycles are generated.

#### Cancellation Reason

The merchant must select a **Customer Cancellation Reason** before the cancellation can be confirmed. Available reasons:

| Reason                                   | Typical Use                                                                               |
| ---------------------------------------- | ----------------------------------------------------------------------------------------- |
| Not using the service frequently         | Customer has low or no recent usage                                                       |
| Switching to a different plan or product | Customer intends to move to another plan (may need a new subscription created separately) |
| Pricing-related reason                   | Customer feels the price is too high or no longer justified                               |
| Found a better alternative               | Customer has moved to a competitor's offering                                             |
| Unsatisfactory experience                | Customer is dissatisfied with the product or service quality                              |
| Other                                    | Any reason not covered by the options above                                               |
| {% endtab %}                             |                                                                                           |
| {% endtabs %}                            |                                                                                           |

### Individual Cancellation

To cancel a single subscription, the merchant follows these steps:

{% stepper %}
{% step %}

### Navigate to the subscriptions list

Click the three-dot icon (**More Actions**) on the right side of the specific subscription row.

<img src="/files/hveIvcMOSJPxGJ3AZI3s" alt="" height="327" width="624">
{% endstep %}

{% step %}

### Select Cancel

Select **Cancel** from the dropdown menu. A confirmation modal appears, prompting the merchant to select a Cancellation Reason.

<img src="/files/uAulKxg9OIgRBXiYieR6" alt="" height="325" width="624">
{% endstep %}

{% step %}

### Confirm the cancellation

Choose the appropriate reason and click **Cancel Subscription** to confirm — or click **Keep Subscription** to abort.

<img src="/files/6UXNM7mO1KW71FdpiP1Q" alt="" height="327" width="624">
{% endstep %}
{% endstepper %}

### Bulk Cancellation

To cancel multiple subscriptions at once, the merchant follows these steps:

{% stepper %}
{% step %}

### Navigate to the subscriptions list

Select the checkboxes next to the subscriptions with an "ACTIVE" status.

<img src="/files/ZQrwEw7OVoqgCan2P7cr" alt="" height="324" width="624">
{% endstep %}

{% step %}

### Select Cancel

Click the **Action** button at the top of the table and select **Cancel**.

<img src="/files/XB7zkHQxc7fGovflseU1" alt="" height="323" width="624">
{% endstep %}

{% step %}

### Choose a reason

A confirmation modal appears, prompting the merchant to select a single Cancellation Reason that will be applied to all selected subscriptions.

<img src="/files/23mHiNqS7Nh5jA15iGXv" alt="" height="325" width="624">
{% endstep %}

{% step %}

### Confirm the bulk action

Choose the appropriate reason and click **Cancel Subscription** to confirm the bulk action — or click **Keep Subscription** to abort.

<img src="/files/pZWkRIzKVorUkZM14by8" alt="" height="327" width="624">
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
The same Cancellation Reason is applied to every subscription included in a bulk action — reasons cannot be set individually per subscription within a single bulk request.
{% endhint %}

#### ✅ Usage examples:

* Merchant cancels a single gym membership subscription for a member who reported the gym is too far from home, selecting "Other" as the reason.
* Merchant selects 12 expiring tuition subscriptions with low attendance and bulk-cancels them at end of semester, selecting "Not using the service frequently."
* Merchant cancels a co-working desk rental subscription after the tenant reports moving to a cheaper shared space nearby, selecting "Found a better alternative."

### Merchant Experience

Merchants manage cancellations entirely from the Subscription list at `Subscription and Billing → Subscription`:

* Individual cancellation is available via the three-dot (**More Actions**) icon on any subscription row.
* Bulk cancellation is available via the **Action** button once one or more "Active" subscriptions are checked.
* Both flows route through the same confirmation modal, requiring a **Cancellation Type** and **Cancellation Reason** before the action is finalized.

## FAQ

<details>

<summary>Can I cancel more than one subscription at the same time?</summary>

Yes. Select the checkboxes next to subscriptions with an "Active" status in the subscription list, then use the **Action** button and choose **Cancel**.

</details>

<details>

<summary>Does every cancellation require a reason?</summary>

Yes. The confirmation modal requires the merchant to select a Customer Cancellation Reason — for both individual and bulk cancellation — before the action can be confirmed.

</details>

<details>

<summary>Can I back out of a cancellation after opening the confirmation modal?</summary>

Yes. Click **Keep Subscription** in the confirmation modal to close it without cancelling the subscription.

</details>

<details>

<summary>Which subscriptions can be included in a bulk cancellation?</summary>

Bulk cancellation targets subscriptions with an "Active" status, selected via checkboxes in the subscription list.

</details>


# Invoice and Receipt

Every active subscription automatically generates an invoice that is immediately delivered to the customer via email. After a successful payment, the system automatically issues a receipt. Merchants can customize the appearance of invoices and receipts through System Preference.

## Features & Benefits

**📄 Automatic Invoice Generation**

Every billing cycle generates an invoice automatically — no manual action is required from the merchant.

**🎨 Customizable Branding**

Tailor the look of invoices and receipts with your company logo, brand name, custom colors, and a preferred template layout.

**💳 Auto-Debit Enrollment**

Customers can enable auto-debit directly from the invoice page — future billing cycles are then charged automatically.

**🧾 PDF Download**

Customers and merchants can download invoices and receipts as PDF files for official record-keeping.

## How It Works

{% stepper %}
{% step %}

### Invoice Generated

The system automatically issues an invoice every cycle and delivers it to the customer's email
{% endstep %}

{% step %}

### Customer Pays

Customer opens the email, clicks the payment link, reviews the invoice, and completes payment
{% endstep %}

{% step %}

### Receipt Sent

After a successful payment, a receipt is automatically sent to the customer's email as proof of payment
{% endstep %}
{% endstepper %}

## Capability Details

{% tabs %}
{% tab title="Invoice" %}

<figure><img src="/files/LLovwTzBDGPsAZw2xMRU" alt="" width="563"><figcaption></figcaption></figure>

**Invoice contents:**

<table><thead><tr><th width="170.375">Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>Subscription ID</strong></td><td>Unique subscription identifier</td></tr><tr><td><strong>Invoice ID</strong></td><td>Unique invoice identifier</td></tr><tr><td><strong>Member ID</strong></td><td>Unique customer identifier</td></tr><tr><td><strong>Amount Due</strong></td><td>Total amount payable</td></tr><tr><td><strong>Due Date</strong></td><td>Payment deadline</td></tr><tr><td><strong>Bill to</strong></td><td>Customer name, email, and phone number</td></tr><tr><td><strong>Details table</strong></td><td>Line items: plan name, quantity, price, discount, subtotal; tax row; and grand total</td></tr><tr><td><strong>Status</strong></td><td>Current payment status (e.g., Pending Payment)</td></tr></tbody></table>

**Customer actions from the invoice:**

* Click **Pay Now** to complete payment manually
* Toggle **Enroll in Auto-debit** to enable automatic payment for future cycles
* Download PDF invoice

**Auto-Debit payment flow:**

<table><thead><tr><th width="206.6953125">Condition</th><th>Payment Flow</th></tr></thead><tbody><tr><td>Auto-Debit <strong>enabled</strong></td><td>Customer inputs and validates card credentials. Future invoices are auto-charged on the due date</td></tr><tr><td>Auto-Debit <strong>disabled</strong></td><td>Customer manually selects a payment method at each cycle</td></tr></tbody></table>

Auto-debit example:\
Gym monthly membership — customer enables it once and payments run automatically every month.
{% endtab %}

{% tab title="Receipt" %}

<figure><img src="/files/z0pjel15G1GhuFxB5uCs" alt="" width="563"><figcaption></figcaption></figure>

**Receipt contents:**

<table><thead><tr><th width="174.17578125">Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>Subscription ID</strong></td><td>Unique subscription identifier</td></tr><tr><td><strong>Receipt ID</strong></td><td>Unique receipt identifier</td></tr><tr><td><strong>Member ID</strong></td><td>Unique customer identifier</td></tr><tr><td><strong>Amount Due</strong></td><td>Total amount paid</td></tr><tr><td><strong>Payment Date</strong></td><td>Date the payment was completed</td></tr><tr><td><strong>Payment Method</strong></td><td>Method used (e.g., Virtual Account Bank Mandiri, Credit Card)</td></tr><tr><td><strong>Bill to</strong></td><td>Customer name, email, and phone number</td></tr><tr><td><strong>Details table</strong></td><td>Line items with applied coupon discounts, tax, and total paid</td></tr><tr><td><strong>Status</strong></td><td><code>Paid</code></td></tr></tbody></table>

**Customer actions from the receipt:**

* Download PDF receipt as official proof of payment
  {% endtab %}

{% tab title="System Preference" %}
**How to access System Preference:**

1. Log in to the merchant dashboard and open **Subscription and Billing**
2. Select the **Subscription** tab
3. Click **System Preference**
4. Open the **Template Preference** tab to begin customization

**Template:**

Choose from **4 standard layout templates** that apply to all invoices and receipts.

<figure><img src="/files/G7asj4S73Chh416DSVEq" alt=""><figcaption></figcaption></figure>

**Branding:**

<figure><img src="/files/IDCGodq5Xf40sZqQ2uzO" alt=""><figcaption></figcaption></figure>

<table><thead><tr><th width="156.5625">Setting</th><th>Description</th></tr></thead><tbody><tr><td><strong>Brand Logo</strong></td><td>Upload your company logo (appears on all PDFs and emails). Format: JPG, PNG. Min 10 KB, max 2 MB</td></tr><tr><td><strong>Brand Name</strong></td><td>The name displayed on all customer-facing documents</td></tr><tr><td><strong>Brand Color</strong></td><td>Primary brand color</td></tr><tr><td><strong>Accent Color</strong></td><td>Accent color for invoice UI elements</td></tr></tbody></table>

**Content:**

<figure><img src="/files/vXv2AqS4WWtwWuShZGiG" alt=""><figcaption></figcaption></figure>

<table><thead><tr><th width="204.99609375">Setting</th><th>Description</th></tr></thead><tbody><tr><td><strong>Footer</strong></td><td>Custom footer message displayed at the bottom of invoices and receipts</td></tr><tr><td><strong>Terms &#x26; Conditions</strong></td><td>Business terms and conditions appended to all invoices</td></tr><tr><td><strong>Signature</strong></td><td>Upload an authorized signature image to appear on invoices</td></tr></tbody></table>

**Signature upload requirements:**

<table><thead><tr><th width="184.00390625">Criteria</th><th>Specification</th></tr></thead><tbody><tr><td>Allowed formats</td><td>JPG, JPEG, PNG</td></tr><tr><td>File size</td><td>10 KB – 1 MB</td></tr><tr><td>Signature name</td><td>Maximum 64 characters</td></tr></tbody></table>

✅ Configure branding once — all invoices and receipts sent to every customer will use the same consistent appearance.
{% endtab %}
{% endtabs %}

## Use Cases

{% tabs %}
{% tab title="Education" %}

<table><thead><tr><th width="153.296875">Customer POV</th><th>Use Case Details</th></tr></thead><tbody><tr><td></td><td><p><strong>Description</strong> A school wants monthly tuition invoices to look professional — with the school logo and a principal's signature. </p><p></p><p><strong>Solution</strong> Configure System Preference with the school logo, brand name, and an authorized signature upload.</p><p></p><p><strong>How It Works</strong> Set up System Preference → upload logo and signature → all automatically issued tuition invoices use the configured appearance.</p><p></p><p><strong>Features Used</strong> System Preference, Branding, Signature</p></td></tr></tbody></table>
{% endtab %}

{% tab title="Fitness" %}

<table><thead><tr><th width="159.6875">Customer POV</th><th>Use Case Details</th></tr></thead><tbody><tr><td></td><td><p><strong>Description</strong> A gym wants members to avoid manual payment every month — a one-time setup so payments run automatically.</p><p></p><p><strong>Solution</strong> When a member receives their first invoice, they enable Auto-debit. All subsequent cycles are automatically charged.</p><p></p><p><strong>How It Works</strong> Member receives invoice → enables Auto-debit → validates card → subsequent months are auto-charged on the due date. </p><p></p><p><strong>Features Used</strong> Invoice, Auto-debit Enrollment</p></td></tr></tbody></table>
{% endtab %}
{% endtabs %}

## Merchant & Customer Experience

#### Merchant View

* Monitor all customer invoice statuses under **Subscription and Billing → Bill**
* Customize invoice appearance under **System Preference → Template Preference**
* Configure webhooks for real-time payment event notifications — Webhook

#### Customer View

* Receives an **invoice via email** every cycle containing billing details and a payment link
* Clicks the payment link to pay and optionally enables auto-debit
* Receives a **receipt via email** after a successful payment
* Can download PDF versions of both invoice and receipt directly from the email

## Terms & Conditions

* Invoices are generated and delivered automatically — no manual action is required from the merchant
* The signature image uploaded in System Preference is for document verification purposes only, not a legally binding digital signature
* Legally binding e-signature functionality will be available in a future release

## FAQ

<details>

<summary>Can a merchant update the invoice appearance after subscriptions are running?</summary>

Yes. Changes made in System Preference apply to all invoices issued after the update is saved. Previously sent invoices are not affected.

</details>

<details>

<summary>Can a customer disable auto-debit after enabling it?</summary>

Yes. Customers can disable auto-debit from their invoice page. Once disabled, future invoices are still issued each cycle, but the customer must pay manually.

</details>

<details>

<summary>Can invoices be virtually signed?</summary>

The System Preference currently supports uploading a signature image for display on invoices. Legally binding digital e-signature functionality is planned for a future release.

</details>


# Host to Host Integration

Integrate FlexiBill directly into your business application or website using the API. Use this approach to programmatically create bills, register subscriptions, and manage billing without going through the dashboard.

## Features & Benefits

**🔗 Full Programmatic Control**

Create bills and subscriptions directly from your application backend — ideal for customer onboarding flows that are fully integrated into your system.

**📤 Multi-Channel Delivery via API**

Deliver invoices to customers via Email and/or WhatsApp in a single API call, without any additional configuration on the dashboard.

**🔁 Recurring and One-Time Support**

The API supports both one-time bill creation and recurring billing with flexible cycle configuration.

## How It Works

| **Step 1**                      | **Step 2**                                      | **Step 3**                                                                                                        |
| ------------------------------- | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| Register and activate FlexiBill | Integrate the API into your application backend | Call the endpoint to create a bill or subscription — FlexiBill delivers the invoice to the customer automatically |

## API Reference

{% hint style="warning" %}
All API requests must include valid authentication headers. See the [Authentication](#authentication) tab below.
{% endhint %}

{% tabs %}
{% tab title="Authentication" %}
All API requests require the following headers:

<table><thead><tr><th width="187.18359375">Header</th><th>Description</th></tr></thead><tbody><tr><td><code>Client-Id</code></td><td>Your merchant Client ID from the DOKU Dashboard</td></tr><tr><td><code>Request-Id</code></td><td>A unique UUID per request</td></tr><tr><td><code>Request-Timestamp</code></td><td>UTC timestamp in ISO 8601 format</td></tr><tr><td><code>Signature</code></td><td>HMAC-SHA256 signature for request authentication</td></tr></tbody></table>

**Example headers:**

```
Client-Id: BRN-0228-1748939308074
Request-Id: 69e22f33-e7f3-49b9-9302-f0df1f6059b9
Request-Timestamp: 2025-06-16T03:32:26Z
Signature: HMACSHA256=WNdiEPJEZAW1vLthXygOkzMuCEadiEVK0saLjtFRqqs=
```

👉 Learn more about [how to generate signature](https://developers.doku.com/get-started-with-doku-api/signature-component/non-snap/signature-component-from-request-header)
{% endtab %}

{% tab title="Generate Bill" %}
Create a new bill (one-time or recurring) that will be issued and delivered to a customer.

**Endpoint:**

<table><thead><tr><th width="115.90234375"></th><th>Sandbox</th><th>Production</th></tr></thead><tbody><tr><td><strong>Method</strong></td><td><code>POST</code></td><td><code>POST</code></td></tr><tr><td><strong>URL</strong></td><td><code>https://api-sandbox.doku.com/bill-collection-core/v1/generate/invoice</code></td><td><code>https://api.doku.com/bill-collection-core/v1/generate/invoice</code></td></tr></tbody></table>

**Request body:**

```json
{
  "bill_identifier": "00001111122112",
  "bill_title": "Gym Monthly Fee",
  "bill_description": "Gym Fee April",
  "bill_type": "ONE_TIME_BILL",
  "amount": 10000,
  "currency": "IDR",
  "beneficiary_id": "TRIAL-00003",
  "beneficiary_name": "John Smith",
  "beneficiary_phone": "6287880777777",
  "beneficiary_email": "john.smith@email.com",
  "distribution_channel": ["EMAIL", "WHATSAPP"],
  "invoice_term": "7 days",
  "grace_period": "7 days",
  "template_id_invoice": "TMP-240318-58821",
  "template_invoice_param": [
    "beneficiary_name",
    "bill_identifier",
    "bill_service_title",
    "amount",
    "payment_link"
  ],
  "template_id_receipt": "TMP-RECEIPT-001",
  "template_receipt_param": [
    "beneficiary_name",
    "bill_identifier",
    "bill_service_title",
    "receipt_link"
  ]
}
```

For a **recurring bill**, add the `schedule` object:

```json
{
  "bill_type": "RECURRING",
  "schedule": {
    "bill_cycle": {
      "type": "INTERVAL",
      "interval": "1m"
    },
    "start_date": "2025-11-12T15:19:00Z",
    "end_date": {
      "type": "AFTER_X_TIMES",
      "count": 12
    }
  }
}
```

**Request parameters:**

<table><thead><tr><th>Parameter</th><th width="110.66015625">Required</th><th width="95.3359375">Max Length</th><th width="96.54296875">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>bill_identifier</code></td><td>✅</td><td>20</td><td>String</td><td>Unique bill reference ID. No spaces allowed.</td></tr><tr><td><code>bill_title</code></td><td>✅</td><td>256</td><td>String</td><td>Name of the billed service.</td></tr><tr><td><code>bill_description</code></td><td>Optional</td><td>256</td><td>String</td><td>Additional service description.</td></tr><tr><td><code>bill_type</code></td><td>✅</td><td>—</td><td>Enum</td><td><code>ONE_TIME_BILL</code> or <code>RECURRING</code></td></tr><tr><td><code>amount</code></td><td>✅</td><td>12</td><td>Double</td><td>Bill amount.</td></tr><tr><td><code>currency</code></td><td>✅</td><td>3</td><td>String</td><td>Currency code (e.g., <code>IDR</code>,<code>MYR</code>).</td></tr><tr><td><code>beneficiary_id</code></td><td>✅</td><td>20</td><td>String</td><td>Unique customer reference ID.</td></tr><tr><td><code>beneficiary_name</code></td><td>✅</td><td>128</td><td>String</td><td>Customer full name.</td></tr><tr><td><code>beneficiary_phone</code></td><td>✅</td><td>128</td><td>Numeric String</td><td>Customer phone with country code. Indonesia: <code>62</code>, Malaysia: <code>60</code>.</td></tr><tr><td><code>beneficiary_email</code></td><td>✅</td><td>256</td><td>String</td><td>Customer email address.</td></tr><tr><td><code>distribution_channel</code></td><td>✅</td><td>—</td><td>Array</td><td>One or both: <code>EMAIL</code>, <code>WHATSAPP</code>. Determines how the invoice and receipt are delivered to the customer.</td></tr><tr><td><code>invoice_term</code></td><td>Optional</td><td>128</td><td>String</td><td>Payment deadline window. Examples: <code>due upon receipt</code>, <code>7 days</code>, <code>end of month</code>. Max 90 days.</td></tr><tr><td><code>grace_period</code></td><td>Optional</td><td>128</td><td>String</td><td>Buffer after due date. Examples: <code>no grace period</code>, <code>7 days</code>. Max 90 days.</td></tr><tr><td><code>template_id_invoice</code></td><td>If <code>WHATSAPP</code></td><td>—</td><td>String</td><td>WhatsApp template ID for invoice delivery. Required when <code>distribution_channel</code> includes <code>WHATSAPP</code>.</td></tr><tr><td><code>template_invoice_param</code></td><td>If <code>WHATSAPP</code></td><td>—</td><td>Array</td><td>Ordered list of data fields mapped to the WhatsApp invoice template variables. Must match the variable order defined in the template. Required when <code>template_id_invoice</code> is provided.</td></tr><tr><td><code>template_id_receipt</code></td><td>If <code>WHATSAPP</code></td><td>—</td><td>String</td><td>WhatsApp template ID for receipt delivery. Required when <code>distribution_channel</code> includes <code>WHATSAPP</code>. </td></tr><tr><td><code>template_receipt_param</code></td><td>If <code>WHATSAPP</code></td><td>—</td><td>Array</td><td>Ordered list of data fields mapped to the WhatsApp receipt template variables. Must match the variable order defined in the template. Required when <code>template_id_receipt</code> is provided.</td></tr></tbody></table>

{% hint style="info" %}
**WhatsApp template parameters** — `template_id_invoice`, `template_invoice_param`, `template_id_receipt`, and `template_receipt_param` are only required when `distribution_channel` includes `WHATSAPP`. If you are sending via `EMAIL` only, omit these four fields entirely. WhatsApp templates must be pre-approved and registered in the DOKU Dashboard before use via PAYCHAT
{% endhint %}

**Schedule parameters (Recurring only):**

<table><thead><tr><th>Parameter</th><th width="150.97265625">Required</th><th width="92.8984375">Type</th><th>Format</th><th width="244.06640625">Description</th></tr></thead><tbody><tr><td><code>schedule.bill_cycle.type</code></td><td>✅</td><td>Enum</td><td>—</td><td><code>INTERVAL</code> — bills are issued at a fixed time interval. <code>SPECIFIC_DATE</code> — bills are issued on a set day each cycle.</td></tr><tr><td><code>schedule.bill_cycle.interval</code></td><td>If INTERVAL</td><td>String</td><td><code>{number}{unit}</code></td><td>Billing interval. Unit: <code>d</code> (day), <code>m</code> (month), <code>y</code> (year). Examples: <code>7d</code>, <code>1m</code>, <code>1y</code>. Range: 1–999.</td></tr><tr><td><code>schedule.start_date</code></td><td>✅</td><td>String</td><td>ISO 8601 UTC</td><td>First bill issuance date. Must be ≥ request timestamp.</td></tr><tr><td><code>schedule.end_date.type</code></td><td>✅</td><td>Enum</td><td>—</td><td><code>AFTER_X_TIMES</code> — stops after N cycles. <code>SPECIFIC_DATE</code> — stops on a calendar date. <code>NEVER</code> — runs until manually canceled.</td></tr><tr><td><code>schedule.end_date.count</code></td><td>If AFTER_X_TIMES</td><td>Integer</td><td>—</td><td>Number of billing cycles before the recurring bill stops. Must be > 0.</td></tr><tr><td><code>schedule.end_date.specific_date</code></td><td>If SPECIFIC_DATE</td><td>String</td><td>ISO 8601 UTC</td><td>The date the recurring bill ends. Must be ≥ <code>start_date</code>.</td></tr></tbody></table>

**Response (HTTP 200):**

```json
{
  "code": "SUCCESS",
  "message": "success",
  "data": {
    "bill_identifier": "00001111122112",
    "bill_title": "Gym Monthly Fee",
    "amount": 10000,
    "currency": "IDR",
    "beneficiary_id": "TRIAL-00003",
    "beneficiary_name": "John Smith",
    "beneficiary_phone": "6287880777777",
    "beneficiary_email": "john.smith@email.com",
    "state": "INVOICE_SENT",
    "status": "UNPAID",
    "invoice_number": "INV-00001111122112-hwb52"
  }
}
```

**Response parameters:**

<table><thead><tr><th width="277.83203125">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>data.bill_identifier</code></td><td>Unique bill reference ID echoed from the request</td></tr><tr><td><code>data.bill_title</code></td><td>Name of the billed service</td></tr><tr><td><code>data.amount</code></td><td>Bill amount</td></tr><tr><td><code>data.currency</code></td><td>Currency code</td></tr><tr><td><code>data.beneficiary_id</code></td><td>Unique customer reference ID</td></tr><tr><td><code>data.beneficiary_name</code></td><td>Customer name</td></tr><tr><td><code>data.beneficiary_phone</code></td><td>Customer phone with country code</td></tr><tr><td><code>data.beneficiary_email</code></td><td>Customer email</td></tr><tr><td><code>data.state</code></td><td>Current invoice delivery state. See invoice delivery states below.</td></tr><tr><td><code>data.status</code></td><td>Payment status of the invoice. <code>UNPAID</code> on creation.</td></tr><tr><td><code>data.invoice_number</code></td><td>System-generated invoice number for this bill</td></tr></tbody></table>

**Invoice delivery states (`data.state`):**

<table><thead><tr><th width="185.65625">State</th><th>Description</th></tr></thead><tbody><tr><td><code>INVOICE_IN_PROCESS</code></td><td>The system is generating the invoice.</td></tr><tr><td><code>INVOICE_CREATED</code></td><td>Invoice has been created and is queued for delivery.</td></tr><tr><td><code>INVOICE_SENT</code></td><td>Invoice has been successfully delivered to the customer.</td></tr><tr><td><code>INVOICE_ERROR</code></td><td>Delivery failed — typically due to insufficient deposit balance. Top up your deposit; the system will automatically retry.</td></tr></tbody></table>

***

#### Response Scenarios

{% tabs %}
{% tab title="✅ Success" %}
**HTTP 200 — Bill generated and invoice delivered.**

```json
{
  "code": "SUCCESS",
  "message": "success",
  "data": {
    "bill_identifier": "00001111122112",
    "bill_title": "Gym Monthly Fee",
    "amount": 10000,
    "currency": "IDR",
    "beneficiary_id": "TRIAL-00003",
    "beneficiary_name": "John Smith",
    "beneficiary_phone": "6287880777777",
    "beneficiary_email": "john.smith@email.com",
    "state": "INVOICE_SENT",
    "status": "UNPAID",
    "invoice_number": "INV-00001111122112-hwb52"
  }
}
```

**What happens next:**

* The invoice is delivered to the customer via the channels specified in `distribution_channel`
* The bill is visible in the DOKU Dashboard under Subscription and Billing → Bill
* Monitor payment status via Webhook or the dashboard
  {% endtab %}

{% tab title="❌ Invalid Distribution Channel" %}
**HTTP 400 — Unsupported or missing `distribution_channel`.**

The `distribution_channel` array is empty, contains an invalid value, or `WHATSAPP` is specified but WhatsApp has not been activated for the merchant account.

```json
{
    "error": {
        "code": "invalid_parameter",
        "type": "invalid_request_error",
        "message": "Invalid distribution channel"
    }
}
```

**Resolution:** Use `["EMAIL"]` if WhatsApp has not been activated. To enable WhatsApp delivery, activate DOKU PayChat from the DOKU Dashboard.
{% endtab %}

{% tab title="❌ Missing Template Whatsapp" %}
**HTTP 400 —  Missing `template`.**

The `template` array is empty, contains an invalid value when `WHATSAPP` is specified as distribution channel.

```json
{
    "error": {
        "code": "invalid_parameter",
        "type": "invalid_request_error",
        "message": "Missing necessary parameter template id"
    }
}
```

**Resolution:** Use `["EMAIL"]` if WhatsApp template has not been approved. Or check template has been approved in Paychat dashboard.
{% endtab %}

{% tab title="❌ Invalid Recurring Schedule" %}
**HTTP 400 — Recurring bill schedule is invalid.**

The `start_date` is in the past, or the `end_date` configuration is inconsistent. Applies to `bill_type: RECURRING` only.

```json
{
    "error": {
        "code": "invalid_parameter",
        "type": "invalid_request_error",
        "message": "Invalid schedule.end_date.specific_date"
    }
}
```

```json
{
    "error": {
        "code": "invalid_parameter",
        "type": "invalid_request_error",
        "message": "schedule.billCycle.type is invalid"
    }
}
```

**Common causes and resolution:**

| Cause                                                             | Resolution                                                                                                       |
| ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `start_date` is in the past                                       | Set `start_date` to the current datetime or a future datetime                                                    |
| `end_date.specific_date` is before `start_date`                   | Ensure `specific_date` is ≥ `start_date`                                                                         |
| `bill_cycle.interval` format is incorrect                         | Use `{number}{unit}` — e.g., `1m`, `7d`, `1y`. Supported units: `d` (day), `m` (month), `y` (year). Range: 1–999 |
| `end_date.type` is `SPECIFIC_DATE` but `specific_date` is missing | Include `specific_date` when type is `SPECIFIC_DATE`                                                             |
| {% endtab %}                                                      |                                                                                                                  |

{% tab title="❌ Authentication Error" %}
**HTTP 401 — Request authentication failed.**

```json
{
    "error": {
        "code": "api_key_expired",
        "type": "authentication_error",
        "message": "Permission is not authorized"
    }
}
```

**Resolution:** Verify all required headers are present — `Client-Id`, `Request-Id`, `Request-Timestamp`, and `Signature`. The `Request-Timestamp` must be within an acceptable clock skew of the server time. → See the [Authentication](#authentication) tab.
{% endtab %}
{% endtabs %}
{% endtab %}

{% tab title="Create Subscription" %}
Register a customer subscription with the specified plan, schedule, and customer profile.

**Endpoint:**

<table><thead><tr><th width="106.9453125"></th><th>Sandbox</th><th>Production</th></tr></thead><tbody><tr><td><strong>Method</strong></td><td><code>POST</code></td><td><code>POST</code></td></tr><tr><td><strong>URL</strong></td><td><code>https://api-sandbox.doku.com/subscription-core/v1/subscription</code></td><td><code>https://api.doku.com/subscription-core/v1/subscription</code></td></tr></tbody></table>

***

#### ⚠️ Prerequisites

Before executing this API request, the following entities must be pre-registered via the DOKU Dashboard back-office. Passing unregistered codes will result in a validation error.

| Entity         | Dashboard Path                                     | Passed in API as  | Required           |
| -------------- | -------------------------------------------------- | ----------------- | ------------------ |
| **Collection** | Subscription and Billing → Collection → Collection | `collection_code` | ✅ Always           |
| **Plan**       | Subscription and Billing → Collection → Plan       | `plans[].code`    | ✅ Always           |
| **Coupon**     | Subscription and Billing → Collection → Coupon     | `coupons[].code`  | If applying coupon |
| **Tax**        | Subscription and Billing → Collection → Tax        | `taxes[].code`    | If applying tax    |

{% hint style="warning" %}
The `collection_code`, `plans[].code`, `taxes[].code`, and `coupons[].code` values must exactly match the codes registered in the dashboard. These codes are **case-sensitive**. There is no API endpoint to create collections, plans, taxes, or coupons — they must be configured in the dashboard first.
{% endhint %}

***

#### Request Body

```json
{
  "subscription_code": "SUBSCRIPTIONS25000001",
  "auto_generate_id": true,
  "plan_type": "SINGLE_PLAN",
  "collection_code": "COLLECTIONS25000001",
  "plans": [
    {
      "code": "PLANS25000001",
      "qty": 1,
      "amount": 10000.00
    }
  ],
  "coupons": [
    {
      "code": "COUPON25000001"
    }
  ],
  "taxes": [
    {
      "code": "TAXES25000001"
    }
  ],
  "currency": "IDR",
  "total_amount": 11000.00,
  "plan_schedule": {
    "start_date": "2025-09-02T00:00:00Z",
    "end_date": {
      "type": "AFTER_X_TIMES",
      "count": 12
    }
  },
  "customers": [
    {
      "ext_id":"STUDENT001013",
      "email": "john.smith@email.com",
      "name": "John Smith",
      "phone_number": "088812341234",
      "calling_code": "62"
    }
  ]
}
```

***

#### Request Parameters

**Top-level fields:**

<table><thead><tr><th>Parameter</th><th width="107.55859375">Required</th><th width="95.8671875">Max Length</th><th width="87.67578125">Type</th><th width="233.60546875">Description</th></tr></thead><tbody><tr><td><code>subscription_code</code></td><td>Optional</td><td>20</td><td>String</td><td>Unique subscription ID. Must be unique across the merchant account. Can be omitted if <code>auto_generate_id</code> is <code>true</code>. No spaces allowed.</td></tr><tr><td><code>auto_generate_id</code></td><td>Optional</td><td>—</td><td>Boolean</td><td>If <code>true</code>, the system auto-generates a unique subscription code. Ignored if <code>subscription_code</code> is provided.</td></tr><tr><td><code>plan_type</code></td><td>✅</td><td>—</td><td>Enum</td><td><code>SINGLE_PLAN</code> or <code>BUNDLING_PLAN</code></td></tr><tr><td><code>collection_code</code></td><td>✅</td><td>50</td><td>String</td><td>Code of the pre-registered collection. Must exist in the dashboard.</td></tr><tr><td><code>plans</code></td><td>✅</td><td>—</td><td>Array</td><td>At least 1 plan object required. Maximum 10 plans. All plans must belong to the same collection and share the same billing cycle.</td></tr><tr><td><code>plans[].code</code></td><td>✅</td><td>20</td><td>String</td><td>Code of the pre-registered plan. Must exist in the dashboard under the specified collection.</td></tr><tr><td><code>plans[].qty</code></td><td>✅</td><td>6</td><td>Integer</td><td>Quantity. Must be > 0. Relevant for Per Unit pricing plans.</td></tr><tr><td><code>plans[].amount</code></td><td>If open-amount plan</td><td>—</td><td>Decimal</td><td>Required only for Open Amount pricing plans. Ignored for all other pricing models.</td></tr><tr><td><code>coupons</code></td><td>Optional</td><td>—</td><td>Array</td><td>Discount coupons to apply. Pass the pre-registered coupon code.</td></tr><tr><td><code>coupons[].code</code></td><td>If coupons present</td><td>20</td><td>String</td><td>Code of the pre-registered coupon. Must exist in the dashboard, be within validity period, and have available stock.</td></tr><tr><td><code>taxes</code></td><td>Optional</td><td>—</td><td>Array</td><td>Taxes to apply. Pass the pre-registered tax code.</td></tr><tr><td><code>taxes[].code</code></td><td>If taxes present</td><td>20</td><td>String</td><td>Code of the pre-registered tax. Must exist in the dashboard under the specified collection.</td></tr><tr><td><code>currency</code></td><td>✅</td><td>3</td><td>String</td><td>ISO 4217 currency code (e.g., <code>IDR</code>, <code>MYR</code>).</td></tr><tr><td><code>total_amount</code></td><td>✅</td><td>—</td><td>Decimal</td><td>Grand total per billing cycle: plan price(s) minus coupon discount plus tax. For <code>MYR</code> must be ≥ 2.00. Must match the server-calculated total — a mismatch will return a validation error.</td></tr></tbody></table>

**Schedule parameters (`plan_schedule`):**

<table><thead><tr><th>Parameter</th><th width="102.59765625">Required</th><th width="87.83984375">Type</th><th width="137.27734375">Format</th><th width="221.71484375">Description</th></tr></thead><tbody><tr><td><code>plan_schedule.start_date</code></td><td>✅</td><td>String</td><td>ISO 8601 UTC</td><td>Subscription activation datetime. Must be ≥ request timestamp. Cannot be a past date.</td></tr><tr><td><code>plan_schedule.end_date.type</code></td><td>✅</td><td>Enum</td><td>—</td><td><code>SPECIFIC_DATE</code> — ends on a calendar date. <code>AFTER_X_TIMES</code> — ends after N billing cycles. <code>NEVER</code> — runs until manually canceled.</td></tr><tr><td><code>plan_schedule.end_date.specific_date</code></td><td>If SPECIFIC_DATE</td><td>String</td><td>ISO 8601 UTC</td><td>The date the subscription ends. Must be ≥ <code>start_date</code>.</td></tr><tr><td><code>plan_schedule.end_date.count</code></td><td>If AFTER_X_TIMES</td><td>Integer</td><td>—</td><td>Number of billing cycles before the subscription expires automatically. Must be > 0.</td></tr></tbody></table>

**Customer parameters (`customers[]`):**

<table><thead><tr><th width="159.09375">Parameter</th><th width="109.08203125">Required</th><th width="94.08984375">Max Length</th><th width="89.1484375">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>customers[].id</code></td><td>Optional</td><td>20</td><td>String</td><td>Customer ID in the DOKU member database (Member Center). Provide this to link the subscription to an existing member record.</td></tr><tr><td><code>customers[].ext_id</code></td><td>Optional</td><td>20</td><td>String</td><td>Customer reference ID in the merchant's own system. Used for cross-referencing with internal records.</td></tr><tr><td><code>customers[].email</code></td><td>✅</td><td>100</td><td>String</td><td>Valid RFC 5322 email address. Invoices and receipts are delivered to this address.</td></tr><tr><td><code>customers[].name</code></td><td>✅</td><td>100</td><td>String</td><td>Customer full name.</td></tr><tr><td><code>customers[].phone_number</code></td><td>✅</td><td>15</td><td>String</td><td>Phone number excluding country calling code.</td></tr><tr><td><code>customers[].calling_code</code></td><td>✅</td><td>2</td><td>String</td><td>Country calling code: <code>62</code> (Indonesia), <code>60</code> (Malaysia).</td></tr><tr><td><code>customers[].additional_data</code></td><td>Optional</td><td>—</td><td>Object</td><td>Container for custom registration metadata (e.g., member group data, form responses).</td></tr></tbody></table>

***

#### Response Scenarios

{% tabs %}
{% tab title="✅ Success" %}
**HTTP 201 — Subscription created successfully.**

The subscription has been registered. The first invoice will be issued automatically on `plan_schedule.start_date`.

```json
{
    "code": "success",
    "type": "success",
    "message": "Success",
    "data": "SUB26000158"
}
```

**What happens next:**

* The subscription is visible in the DOKU Dashboard under Subscription and Billing → Subscription
* The first invoice is generated on the start date and delivered to the customer via the configured distribution channel
* Subsequent invoices are issued automatically at each billing cycle
  {% endtab %}

{% tab title="❌ Unregistered Code" %}
**HTTP 400 — Collection, plan, tax, or coupon code not found.**

One or more of the entity codes passed in the request do not exist in the dashboard, or do not belong to the specified collection. It can also happen when coupon is ineligible.

```json
{
  "error": {
    "code": "invalid_parameter",
    "type": "invalid_request_error",
    "message": "One or more requested plans not found in collection"
  }
}
```

```json
{
  "error": {
    "code": "failed_creating_subscription",
    "type": "failed_creating_subscription",
    "message": "Plan stock is empty: PLAN26000008"
  }
}
```

```json
{
    "error": {
        "code": "failed_creating_subscription",
        "type": "failed_creating_subscription",
        "message": "Active or eligible coupon not found for code: CEDARCREEK"
    }
} 
```

```json
{
    "error": {
        "code": "failed_creating_subscription",
        "type": "failed_creating_subscription",
        "message": "Coupon stock empty: CPN26000090"
    }
}
```

**Common causes and resolution:**

<table><thead><tr><th width="264.4765625">Cause</th><th>Resolution</th></tr></thead><tbody><tr><td><code>collection_code</code> does not exist</td><td>Create the collection in the dashboard: Subscription and Billing → Collection → Collection</td></tr><tr><td><code>plans[].code</code> does not exist</td><td>Create the plan in the dashboard: Subscription and Billing → Collection → Plan</td></tr><tr><td><code>plans[].code</code> exists but belongs to a different collection</td><td>Verify the plan belongs to the collection passed in <code>collection_code</code></td></tr><tr><td><code>taxes[].code</code> does not exist</td><td>Create the tax in the dashboard: Subscription and Billing → Collection → Tax</td></tr><tr><td><code>coupons[].code</code> does not exist or has expired</td><td>Create or reactivate the coupon in the dashboard: Subscription and Billing → Collection → Coupon</td></tr><tr><td>Code is correct but wrong casing</td><td>All codes are case-sensitive — verify the exact string including uppercase/lowercase</td></tr></tbody></table>
{% endtab %}

{% tab title="❌ Invalid Schedule" %}
**HTTP 400 — Schedule configuration is invalid.**

The `plan_schedule.start_date` is in the past, or the `end_date` configuration is inconsistent.

```json
{
    "error": {
        "code": "invalid_parameter",
        "type": "invalid_request_error",
        "message": "Invalid date format. Must be in ISO8601 format"
    }
}
```

```json
{
    "error": {
        "code": "invalid_parameter",
        "type": "invalid_request_error",
        "message": "plan_schedule.end_date.specific_date specificDate is required when type is SPECIFIC_DATE"
    }
}
```

**Common causes and resolution:**

| Cause                                                             | Resolution                                                      |
| ----------------------------------------------------------------- | --------------------------------------------------------------- |
| `start_date` is in the past                                       | Set `start_date` to the current datetime or a future datetime   |
| `end_date.specific_date` is before `start_date`                   | Ensure `specific_date` is ≥ `start_date`                        |
| `end_date.count` is 0 or negative                                 | Set `count` to a positive integer ≥ 1                           |
| `end_date.type` is `SPECIFIC_DATE` but `specific_date` is missing | Include `specific_date` when `end_date.type` is `SPECIFIC_DATE` |
| `end_date.type` is `AFTER_X_TIMES` but `count` is missing         | Include `count` when `end_date.type` is `AFTER_X_TIMES`         |
| {% endtab %}                                                      |                                                                 |

{% tab title="❌ Total Amount Mismatch" %}
**HTTP 400 — `total_amount` does not match the server-calculated total.**

The `total_amount` passed in the request does not match the amount calculated by the server based on the plan price(s), coupon discount, and tax rate.

```json
{
  "error": {
    "code": "Payment amount mismatch",
    "type": "Payment amount mismatch",
    "message": "Payment amount mismatch"
  }
}
```

**Resolution:** Recalculate `total_amount` using the following order before submitting:

> Plan price(s) × qty → Coupon discount deducted → Subtotal → Tax applied on subtotal → `total_amount`

Verify each component's value against the registered plan price, coupon discount value, and tax rate in the dashboard before resubmitting.
{% endtab %}

{% tab title="❌ Currency not match" %}
**HTTP 400 — `currency`  does not match the merchant's registered business country.**

The `currency` value passed in the request is not valid for this merchant account. The accepted currency is determined by the country in which the merchant's business account is registered — it cannot be overridden per request.

```json
{
  "error": {
    "code": "invalid_parameter",
    "type": "invalid_request_error",
    "message": "Currency must match with business country"
  }
}
```

**Currency by registered business country:**

<table><thead><tr><th width="321.9609375">Registered Business Country</th><th>Required Currency</th></tr></thead><tbody><tr><td>🇮🇩 Indonesia</td><td><code>IDR</code></td></tr><tr><td>🇲🇾 Malaysia</td><td><code>MYR</code></td></tr></tbody></table>

**Common causes and resolution:**

<table><thead><tr><th width="215.9140625">Cause</th><th>Resolution</th></tr></thead><tbody><tr><td>Wrong currency code for business country</td><td>Use the currency that matches your merchant account's registered country — <code>IDR</code> for Indonesia, <code>MYR</code> for Malaysia</td></tr><tr><td>Currency code is lowercase or mixed case</td><td><code>currency</code> is case-sensitive — use uppercase: <code>"IDR"</code> or <code>"MYR"</code>, not <code>"idr"</code> or <code>"Myr"</code></td></tr><tr><td>Attempting to use a third currency</td><td>Only the currency matching the registered business country is accepted. Multi-currency is not supported within a single merchant account</td></tr></tbody></table>

{% hint style="info" %}
Your merchant account's registered business country is set at the time of KYB (Know Your Business) verification on DOKU Dashboard and cannot be changed without re-verification. If you need to process transactions in a different currency, a separate merchant account registered in the corresponding country is required.
{% endhint %}
{% endtab %}

{% tab title="❌ Invalid Customer Data" %}
**HTTP 400 — Customer email or phone number format is invalid.**

One or more fields in the `customers[]` object failed format validation. The subscription is not created.

```json
{
  "error": {
    "code": "invalid_parameter",
    "type": "invalid_request_error",
    "message": "customers[0].email must be a well-formed email address"
  }
}
```

```json
{
  "error": {
    "code": "invalid_parameter",
    "type": "invalid_request_error",
    "message": "customers[0].phone_number must match \"^[0-9]*$\""
  }
}
```

**Common causes and resolution:**

<table><thead><tr><th width="276.0859375">Case</th><th>Resolution</th></tr></thead><tbody><tr><td>Missing <code>@</code> symbol — e.g., <code>johnsmithatemail.com</code></td><td>Ensure the email contains exactly one <code>@</code> separating local part and domain</td></tr><tr><td>Missing domain after <code>@</code> — e.g., <code>john@</code></td><td>Provide a complete domain — e.g., <code>john@email.com</code></td></tr><tr><td>Missing local part before <code>@</code> — e.g., <code>@email.com</code></td><td>Provide the local part before <code>@</code></td></tr><tr><td>Consecutive dots in domain — e.g., <code>john@email..com</code></td><td>Remove duplicate dots in the domain portion</td></tr><tr><td>Space in address — e.g., <code>john smith@email.com</code></td><td>Remove all spaces — email addresses do not allow spaces</td></tr><tr><td>Exceeds max length</td><td>Max 100 characters</td></tr><tr><td>Calling code included — e.g., <code>phone_number: "6281234567890"</code> with <code>calling_code: "62"</code></td><td>Pass the calling code in <code>calling_code</code> only — e.g., <code>phone_number: "81234567890"</code>, <code>calling_code: "62"</code></td></tr><tr><td>Non-numeric characters — e.g., <code>"+6281234567"</code> or <code>"0812-3456-7890"</code></td><td>Strip all non-numeric characters including <code>+</code>, <code>-</code>, spaces, and parentheses. Digits only</td></tr><tr><td>Unsupported value — e.g., <code>calling_code: "1"</code></td><td>Accepted values: <code>"62"</code> (Indonesia) and <code>"60"</code> (Malaysia) only</td></tr><tr><td>Exceeds max length</td><td>Max 15 characters, excluding calling code</td></tr></tbody></table>
{% endtab %}

{% tab title="❌ Account Suspended" %}
**HTTP 404 — Merchant account is suspended.**

The merchant account has been suspended by DOKU. No new transactions — subscriptions, bills, or any other — can be created until the suspension is lifted. The request payload is valid; the error is at the account level, not the request level.

```json
{
  "error": {
    "code": "not_found",
    "type": "not_found",
    "message": "Merchant not found or invalid finance status"
  }
}
```

**Resolution:**

This error cannot be resolved by modifying the request. Contact your **DOKU Account Manager** or **DOKU Support** directly to identify the cause of the suspension and the steps required to reinstate the account.

{% hint style="info" %}
Do not retry the request repeatedly while the account is in suspended state — the request will continue to fail regardless of payload content until the account suspension is lifted by DOKU.&#x20;
{% endhint %}
{% endtab %}

{% tab title="❌ Authentication Error" %}
**HTTP 401 — Request authentication failed.**

The authentication headers are missing, malformed, or the signature does not match.

```json
{
  "error": {
    "code": "invalid_signature",
    "message": "Invalid Header Signature",
    "type": "invalid_request_error"
  }
}
```

**Resolution:** Verify all required headers are present and correctly formed — `Client-Id`, `Request-Id`, `Request-Timestamp`, and `Signature`. The `Request-Timestamp` must be within an acceptable clock skew of the server time. Regenerate the signature if in doubt. → See the [Authentication](#authentication) tab.
{% endtab %}
{% endtabs %}
{% endtab %}
{% endtabs %}

## Use Cases

{% tabs %}
{% tab title="ISP" %}

<table><thead><tr><th width="167.1875">Customer POV</th><th>Use Case Details</th></tr></thead><tbody><tr><td></td><td><strong>Description</strong> An internet service provider wants to integrate FlexiBill billing into their customer activation portal — when a customer activates a package, the system automatically creates a subscription and sends the first invoice. <strong>Solution</strong> Integrate the Create Subscription API into the activation portal backend. When a customer selects a package and submits, the system calls the FlexiBill API to create the subscription and deliver the first invoice programmatically. <strong>How It Works</strong> Customer selects package in portal → backend calls Create Subscription API → FlexiBill creates subscription and delivers first invoice → billing runs automatically each cycle. <strong>Features Used</strong> Create Subscription API, Generate Bill API, Webhook</td></tr></tbody></table>
{% endtab %}

{% tab title="SaaS" %}

<table><thead><tr><th width="175.85546875">Customer POV</th><th>Use Case Details</th></tr></thead><tbody><tr><td></td><td><strong>Description</strong> A SaaS platform wants to bill customers based on the number of active users each month (per-seat billing). <strong>Solution</strong> At the end of each month, the SaaS system counts active users and calls the Generate Bill API with the dynamically calculated amount. <strong>How It Works</strong> System counts active users → calls Generate Bill API with calculated amount → FlexiBill delivers invoice to customer → customer pays via payment link. <strong>Features Used</strong> Generate Bill API (One-Time Bill), Webhook</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

## Merchant & Customer Experience

#### Merchant View

Merchants (developers) integrate the API into their system backend:

* Use the **Sandbox endpoint** for development and testing
* Switch to the **Production endpoint** after testing is complete
* Monitor bills and subscriptions created via API in the DOKU Dashboard just like any other billing

#### Customer View

The customer experience is identical to dashboard-initiated billing:

* Receives invoice via Email or WhatsApp
* Pays via the payment link
* Receives receipt after successful payment

## Terms & Conditions

* Merchant must be registered with a **corporate business account** on DOKU Dashboard
* Business must be **KYB verified** before using the production API
* All requests must use **HTTPS** and include valid authentication headers

## FAQ

<details>

<summary>What is the difference between the Sandbox and Production endpoints?</summary>

The Sandbox endpoint is used for development and testing — no real transactions are processed and no invoices are delivered to actual customers. The Production endpoint processes live transactions and delivers real invoices. Always develop and test in Sandbox first, then switch the base URL to Production when going live. Your `Client-Id` and `Client-Secret` are different between environments — use the correct credentials for each.

</details>

<details>

<summary>Do bills and subscriptions created via API appear in the DOKU Dashboard?</summary>

Yes. All bills and subscriptions created via the API are immediately visible in the DOKU Dashboard — under Subscription and Billing → Bill and Subscription and Billing → Subscription respectively — and are manageable the same way as records created through the dashboard.

</details>

<details>

<summary>How do I obtain my Client-Id and generate the Signature?</summary>

Your `Client-Id` is available in the DOKU Dashboard under the Integrations menu. The `Signature` is an HMAC-SHA256 hash generated from your `Client-Secret` and a canonical request string composed of the request headers and body. Full instructions for signature generation are available in the DOKU API documentation.

</details>

<details>

<summary>The collection, plan, or coupon code I am passing is returning a validation error. What should I check?</summary>

All entity codes (`collection_code`, `plans[].code`, `taxes[].code`, `coupons[].code`) must be pre-registered in the DOKU Dashboard before they can be referenced via the API. There is no API endpoint to create these entities programmatically. Check the following in order:

1. The entity exists in the dashboard under the correct menu path
2. The code string is an exact match — these values are **case-sensitive**
3. For plans: the plan belongs to the collection specified in `collection_code`
4. For coupons: the coupon is active, within its validity period, and has available stock
5. For taxes: the tax is associated with the collection specified in `collection_code`

</details>

<details>

<summary>How should I calculate `total_amount` before submitting the Create Subscription request?</summary>

Calculate `total_amount` using the following order:

> Plan price(s) × qty → Coupon discount deducted → Subtotal → Tax rate applied on subtotal → `total_amount`

The value you send must match the server-calculated total exactly. A mismatch will return a `INVALID_REQUEST` error with `field: total_amount`. Verify the registered plan price, coupon discount value (flat or percentage), and tax rate in the dashboard before computing.

</details>

<details>

<summary>Can I pass both `subscription_code` and `auto_generate_id: true` in the same request?</summary>

Yes, but the `subscription_code` takes precedence. When `subscription_code` is present, the system uses that value and ignores `auto_generate_id`. Only omit `subscription_code` entirely when you want the system to auto-generate one. The generated code is not returned in the response body — look it up in the dashboard or via webhook if you need it.

</details>

<details>

<summary>What happens if I submit a Create Subscription request with a `start_date` in the past?</summary>

The request will return an `INVALID_REQUEST` error with `field: plan_schedule.start_date`. The `start_date` must be greater than or equal to the request timestamp. Past dates are not accepted. If you need the subscription to start immediately, set `start_date` to the current UTC time.

</details>

<details>

<summary>My Generate Bill request returned `state: INVOICE_ERROR`. What should I do?</summary>

`INVOICE_ERROR` means the invoice was created but delivery to the customer failed — the most common cause is insufficient deposit balance in your DOKU merchant account. Top up your deposit balance from the DOKU Dashboard. Once balance is restored, the system will automatically retry delivery. You can also monitor the current state of the invoice from the dashboard under Subscription and Billing → Bill.

</details>

<details>

<summary>How do I handle duplicate requests safely for Generate Bill?</summary>

The `bill_identifier` field acts as an idempotency key — the same identifier cannot be used twice within a merchant account. If your request times out or you are unsure whether it was processed, do **not** immediately retry with the same `bill_identifier`. First query the bill's status via the dashboard or inquiry endpoint to confirm whether the original request succeeded. Only generate a new bill (with a new identifier) if you have confirmed the original was not processed.

</details>

<details>

<summary>What is the difference between Generate Bill and Create Subscription for recurring billing?</summary>

Both support recurring billing, but they serve different purposes:

**Generate Bill (RECURRING)** — You define the schedule and the system handles recurring invoice issuance. The billing configuration (amount, cycle, customer) is passed directly in the API call with no dependency on dashboard-configured entities. Use this for custom, ad-hoc, or dynamically-calculated billing where amounts may vary per cycle.

**Create Subscription** — The subscription is bound to a pre-registered Collection and Plan. Pricing, billing cycle, tax, and coupon are all defined in the dashboard. Use this for structured product/service offerings where the plan configuration is reusable and managed centrally.

</details>

<details>

<summary>How do I know when a customer has paid their invoice?</summary>

Set up a Webhook to receive real-time payment notifications. When a customer completes payment, FlexiBill sends a `PAID` event to your configured webhook endpoint with the invoice number and payment details. You can also poll the bill status from the dashboard. → [Webhook](broken://pages/e5325b61ccd5f47ff8164ce256cd39840d32aa1a)

</details>

<details>

<summary>Can I cancel or modify a subscription created via the API?</summary>

Subscriptions created via the API can be viewed and managed from the DOKU Dashboard. Cancellation is performed from the dashboard — there is no dedicated cancel subscription API endpoint. Plan, collection, and schedule fields cannot be changed after a subscription is created. To change the plan for a customer, cancel the existing subscription from the dashboard and create a new one via the API with the updated configuration.

</details>


# Member Center

Member Center is FlexiBill's **customer database engine**. It gives merchants a centralized place to register members, organize them into groups, collect custom profile data per billing context, and link them to subscriptions and billing records.

Every subscription in FlexiBill requires a Member. Member Center is where those members live — and where merchants control what data is collected from each of them.

{% hint style="info" %}
**Member Center** manages your customer database and profile data. **Subscription and Billing** uses that data to issue invoices and track payment status. Both modules work together — but Member Center must be set up first before customers can be subscribed to any plan. → [Learn more about Subscription and Billing](file:///3067849/subscription-and-billing/README.md)
{% endhint %}

***

## Two Core Modules

### Member Management

The central registry for all customer records. Merchants manage their full member list here — adding members individually or in bulk, updating their profiles, and organizing them for downstream billing use.

* Add individual members on the fly or upload thousands at once via CSV/XLSX
* Store general profile data: name, email, phone, address, birthday, company, and more
* Organize members using **Labels** (tags) and **Groups** (named segments)

👉 [*Learn more*](/subscription-and-billing/flexibill/member-center/member-management)

### Form Management

A flexible form builder that allows merchants to define custom data fields per billing context. Forms are attached to Groups — when a member joins a Group, they fill out the Form associated with it, capturing structured, business-specific information beyond the standard profile fields.

* Create forms with **Categories** (sections) and **Details** (individual fields)
* Configure field types, validation criteria, and required/optional status
* Attach a Form to a Group so all members in that Group provide the right data
* Reuse forms across multiple Groups

👉 [*Learn more*](/subscription-and-billing/flexibill/member-center/form-management)

***

## How Member Center Fits Into FlexiBill

```
Member Center
├── Member Management       ← register and manage customers
│   ├── Labels              ← tag-based classification
│   └── Groups              ← segment-based organization, linked to Forms
└── Form Management         ← custom data collection per Group
    ├── Categories          ← sections within a form
    └── Details             ← individual custom fields per category
```

When a Member is assigned to a Group, the Group's linked Form determines what additional information is collected from that member. This data follows the member into their billing records — so merchants always have the right context per customer per billing cycle.

***

## Features & Benefits

#### 🗂️ Centralized Customer Registry

All customer records are stored in one place. Merchants can search, filter, and browse their full member database without leaving the dashboard — no need to cross-reference external spreadsheets.

#### 📋 Custom Data Collection via Forms

Standard member fields (name, email, phone) are often not enough. Form Management allows merchants to define exactly what information they need from members in a specific billing context — class levels for a fitness studio, student IDs for a school, or unit numbers for a property manager.

#### 🏷️ Flexible Member Organization

Labels provide lightweight tagging across the full member list. Groups provide structured segmentation tied to a Form — giving merchants both quick classification and structured data collection in the same workflow.

#### 📤 Bulk Upload for Large Rosters

For merchants migrating from Excel or onboarding large customer bases, bulk data upload supports simultaneous creation of hundreds or thousands of member profiles from a single structured file.

#### 🔗 Direct Link to Subscription and Billing

Members registered in Member Center are the same members used when creating subscriptions. There is no duplicate registration — member data flows directly into the billing workflow.

***

## How It Works

{% stepper %}
{% step %}

### Register Your Members

Add members to the database — individually via the dashboard form or in bulk via file upload. At minimum, each member requires a name and email address.
{% endstep %}

{% step %}

### Organize with Labels and Groups

Apply Labels to members for quick filtering and classification. Assign members to Groups when you need structured segmentation tied to a Form.
{% endstep %}

{% step %}

### Define Custom Forms *(For Group-Based Data Collection)*

Create a Form in Form Management that captures the specific data fields relevant to a Group. Attach the Form to the Group — every member in that Group will provide data per the Form's structure.
{% endstep %}

{% step %}

### Use Members in Subscription and Billing

Once registered, members are available for selection when creating subscriptions or generating bills. Their profile data and custom form responses are linked to their billing records throughout the cycle.
{% endstep %}
{% endstepper %}

***

## Use Cases

{% tabs %}
{% tab title="Fitness" %}

<table><thead><tr><th width="158.3203125">Context</th><th>Details</th></tr></thead><tbody><tr><td><strong>Business</strong></td><td>A gym with multiple classes — Aerobics, Pilates, Catering Diet — each requiring different member intake data.</td></tr><tr><td><strong>Member Center Setup</strong></td><td>Create a Group per class type. Create a Form per Group with relevant fields (e.g., fitness level, health declaration, dietary restrictions). Members are assigned to the appropriate Group when they join a class.</td></tr><tr><td><strong>Result</strong></td><td>Each member's intake form is attached to their record. Instructors and billing staff always know which class a member is in and what their profile contains.</td></tr><tr><td><strong>Features Used</strong></td><td>Member Management, Groups, Form Management</td></tr></tbody></table>
{% endtab %}

{% tab title="Education" %}

<table><thead><tr><th width="152.9765625">Context</th><th>Details</th></tr></thead><tbody><tr><td><strong>Business</strong></td><td>A school billing hundreds of students monthly across different programs (regular, extracurricular, lab).</td></tr><tr><td><strong>Member Center Setup</strong></td><td>Bulk upload the student roster via CSV. Use Labels to tag students by program type (e.g., "Lab 2025", "Extracurricular"). Use Groups to segment students who need to fill in additional data (e.g., emergency contact, scholarship status).</td></tr><tr><td><strong>Result</strong></td><td>The full student database is in one place, organized and ready for bulk billing — no manual re-entry per billing cycle.</td></tr><tr><td><strong>Features Used</strong></td><td>Member Management, Bulk Upload, Labels, Groups</td></tr></tbody></table>
{% endtab %}

{% tab title="Property" %}

<table><thead><tr><th width="164.10546875">Context</th><th>Details</th></tr></thead><tbody><tr><td><strong>Business</strong></td><td>A property manager billing monthly rent and utilities to tenants across multiple tower blocks.</td></tr><tr><td><strong>Member Center Setup</strong></td><td>Register each tenant as a Member. Assign tenants to Groups by tower block. Create a Form per Group with fields specific to the block (e.g., unit number, parking slot, utility meter ID).</td></tr><tr><td><strong>Result</strong></td><td>Each tenant's billing context is clearly tied to their unit and block data — invoices and billing records are unambiguous even across a large portfolio.</td></tr><tr><td><strong>Features Used</strong></td><td>Member Management, Groups, Form Management</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

***

## Terms & Conditions

* Member Center is available to merchants with an active FlexiBill subscription on DOKU Dashboard
* Bulk upload files must be in **CSV, XLS, or XLSX** format with a maximum file size of **15 MB**
* Each member requires at minimum a **name** and a **valid email address**
* Labels and Groups are merchant-defined and can be created directly from within the member creation or management flow

***

## FAQ

<details>

<summary>Do I need to set up Member Center before I can create a subscription?</summary>

Yes. A subscription in Subscription and Billing requires selecting a Member. You must register the customer in Member Center first before they can be linked to a plan or a billing record.

</details>

<details>

<summary>What is the difference between a Label and a Group?</summary>

**Labels** are free-form tags you apply to members for classification and filtering purposes. A member can have multiple Labels. Labels do not have any structured data attached.

**Groups** are named segments tied to a Form. When a member is assigned to a Group, the Group's linked Form determines what additional information is collected from that member. Use Labels for lightweight tagging; use Groups when you need structured, form-based data per segment.

</details>

<details>

<summary>Can one member belong to multiple Groups?</summary>

Yes. A member can be assigned to more than one Group simultaneously. Each Group assignment may have its own associated Form, and the member will be expected to provide data per each Form.

</details>

<details>

<summary>What file formats are supported for bulk member upload?</summary>

Bulk upload supports **CSV, XLS, and XLSX** files. The file must follow the template provided in the Upload Data dialog. Maximum file size is **15 MB**. Download the template before preparing your file to ensure the correct column structure.

</details>

<details>

<summary>Can I export my member list?</summary>

Yes. The Member Center provides an **Export Data** option on the member list page, allowing you to download your member database as a file for backup or offline processing.

</details>

<details>

<summary>Are custom form fields required from members?</summary>

Each field in a Form can be individually configured as **Required** or optional. Required fields must be completed before the member's group profile is saved. Optional fields can be left blank.

</details>


# Member Management

{% hint style="info" %}
This page covers **Member Management** — registering and organizing members. For custom data collection per member group → [Form Management](/subscription-and-billing/flexibill/member-center/form-management)
{% endhint %}

**Member Management** is the central registry for all customer records in FlexiBill. Merchants maintain their full member database here — creating, viewing, editing, and deleting member profiles — and organize members using **Labels** and **Groups** for downstream billing and segmentation.

## Features & Benefits

**➕ Two Member Creation Methods**

Register members one at a time directly from the dashboard, or upload an entire roster in a single structured file. Both methods populate the same member database and are available at any time.

**🏷️ Labels — Flexible Tagging**

Attach one or more Labels to any member for quick classification and filtering. Labels are merchant-defined and can be created on the fly during member creation. Use them to mark billing cohorts, membership tiers, program types, or any classification that makes sense for your business.

**👥 Groups — Structured Segmentation**

Assign members to named Groups. Unlike Labels, Groups are linked to a **Form** — so every member in a Group is associated with a structured set of custom data fields specific to that segment. Groups are the bridge between Member Management and Form Management.

**📤 Export Member Data**

Download your full member list as a file from the dashboard for offline processing, reconciliation, or backup — without needing API access.

## How to Add a Member

### Manual Input via DOKU Dashboard

Use this method to register a single member in real time — ideal for walk-in registrations or small-scale updates.

{% stepper %}
{% step %}

#### Log In

Log in to the DOKU Dashboard using a verified corporate or international business account.
{% endstep %}

{% step %}

#### Navigate to Member Center

From the left navigation menu, select **FlexiBill → Member Center**.
{% endstep %}

{% step %}

#### Open the Add Member Form

Click the **+ Add Member** button on the top right of the member list page.

<figure><img src="/files/vcPLXH7wiMGvFqu0TRHs" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Fill in Member Data

<figure><img src="/files/oCrazLFmnuaAJ7SBN8Ou" alt=""><figcaption></figcaption></figure>

Complete the member form. Fields are divided into two sections:

**General Information**

<table><thead><tr><th width="170.53125">Field</th><th width="107.90234375">Required</th><th>Description</th></tr></thead><tbody><tr><td>Email</td><td>✅ Yes</td><td>Member's email address. Used for invoice and receipt delivery.</td></tr><tr><td>Name</td><td>✅ Yes</td><td>Member's full name.</td></tr><tr><td>Phone Number</td><td>No</td><td>Member's contact number.</td></tr><tr><td>Birthday</td><td>No</td><td>Member's date of birth (dd/mm/yyyy).</td></tr><tr><td>Address</td><td>No</td><td>Street address.</td></tr><tr><td>Province</td><td>No</td><td>Province.</td></tr><tr><td>City</td><td>No</td><td>City, selected from a dropdown.</td></tr><tr><td>Postal Code</td><td>No</td><td>Postal code.</td></tr></tbody></table>

**Additional Information**

<table><thead><tr><th width="166.5546875">Field</th><th width="108.30859375">Required</th><th>Description</th></tr></thead><tbody><tr><td>Company Name</td><td>No</td><td>Member's company or organization.</td></tr><tr><td>Reference ID</td><td>No</td><td>An external identifier from the merchant's system for cross-referencing.</td></tr><tr><td>Label</td><td>No</td><td>One or more Labels for classification. Multiple labels can be selected.</td></tr><tr><td>Group</td><td>No</td><td>The Group this member belongs to. If the target group doesn't exist yet, click <strong>Create New Group</strong> to create one inline.</td></tr></tbody></table>
{% endstep %}

{% step %}

#### Save and Verify

Click **Add Member**. The new member appears immediately in the Member List Table.
{% endstep %}
{% endstepper %}

### Bulk Data Upload

Use this method to onboard a large number of members simultaneously from a structured file — ideal for migrating existing customer rosters or processing batch registrations.

{% stepper %}
{% step %}

#### Log In

Log in to the DOKU Dashboard using a verified corporate or international business account.
{% endstep %}

{% step %}

#### Navigate to Member Center

From the left navigation menu, select **FlexiBill → Member Center**.
{% endstep %}

{% step %}

#### Open the Upload Dialog

Click the **Upload Data** button on the member list page.

<figure><img src="/files/3NALyOpbBOYKh4ttlsRL" alt="" width="345"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Download the Template

<figure><img src="/files/1ZAspqggMeeJqNa5P4md" alt="" width="375"><figcaption></figcaption></figure>

In the Upload Data dialog, select the appropriate template type:

* **Without Form** — for uploading standard member profile data only (name, email, phone, etc.)
* **With Form** — for uploading member data together with custom form field values

Click **Download Template** to get the correct file structure before preparing your data.

{% hint style="warning" %}
Always use the downloaded template to prepare your file. Columns outside the template structure will not be recognized and may cause upload errors.
{% endhint %}
{% endstep %}

{% step %}

#### Prepare and Upload Your File

Fill in the template with your member data. Then click **Insert File** in the dialog and select your prepared file.

**File requirements:**

* Format: **CSV, XLS, or XLSX**
* Maximum file size: **15 MB**

Click **Upload** to begin processing.
{% endstep %}

{% step %}

#### Verify in the Member List

Once processing is complete, all successfully imported members appear in the Member List Table. Review the list to confirm the data was imported correctly.
{% endstep %}
{% endstepper %}

***

## Member List Table

<img src="/files/bKIVU4uRmPwRgvd2OZwu" alt="" height="233" width="624">

The Member List Table is the main view of all registered members. It displays the following columns:

<table><thead><tr><th width="183.10546875">Column</th><th>Description</th></tr></thead><tbody><tr><td>Name</td><td>Member's full name.</td></tr><tr><td>Member ID</td><td>System-generated unique identifier (format: <code>CST-XXXX-XXXXXXXXXX</code>).</td></tr><tr><td>Phone Number</td><td>Contact number, if provided.</td></tr><tr><td>Email</td><td>Email address. Partially masked for privacy in the list view.</td></tr><tr><td>Date of Birth</td><td>Birthday, if provided.</td></tr><tr><td>City</td><td>City, if provided.</td></tr><tr><td>Label</td><td>Labels assigned to the member.</td></tr><tr><td>Action</td><td>Options to view, edit, or delete the member record.</td></tr></tbody></table>

#### Searching and Filtering

Use the controls at the top of the Member List Table to narrow down the displayed records:

<table><thead><tr><th width="204.1953125">Control</th><th>Description</th></tr></thead><tbody><tr><td><strong>Search by Member ID</strong></td><td>Enter a Member ID to locate a specific record directly.</td></tr><tr><td><strong>Search by</strong></td><td>Select a field to search across (e.g., Name, Email, Phone).</td></tr><tr><td><strong>Date Range</strong></td><td>Filter members by registration date.</td></tr><tr><td><strong>Select Form</strong></td><td>Filter members associated with a specific Form.</td></tr><tr><td><strong>Filter</strong></td><td>Apply additional filters to the list.</td></tr><tr><td><strong>Reset</strong></td><td>Clear all active filters and return to the full list.</td></tr></tbody></table>

### Edit and Delete Members

To modify an existing member's profile or remove them from the database, use the **Action** menu (⋮) on the right side of the member's row in the Member List Table:

* **Edit** — Opens the member's profile form pre-filled with their current data. Update any field and save.
* **Delete** — Removes the member from the database. This action cannot be undone.

{% hint style="warning" %}
Deleting a member does not automatically cancel their active subscriptions or outstanding bills. Review and resolve any linked billing records before deleting a member.
{% endhint %}

### Labels

Labels are merchant-defined tags applied to individual members for classification and filtering. A member can have more than one Label.

**Creating a Label:**

Labels can be created inline during member creation — click the **Label** dropdown in the Add Member form and type a new label name if no existing label applies. The new label is saved and becomes available for future use.

**Using Labels:**

Filter the Member List Table by Label using the **Filter** control to view all members tagged with a specific label. Use labels to group members by billing cohort, program type, account status, or any other classification your workflow requires.

### Groups

Groups are named member segments tied to a **Form**. When a member is assigned to a Group, the Group's linked Form determines what additional structured data is collected from that member.

**Creating a Group:**

If the target Group does not yet exist when adding a member, click **Create New Group** in the **Group** dropdown of the Add Member form. Give the Group a name and save it. The Group is now available for selection in the member list and can be linked to a Form in Form Management.

**Assigning a Member to a Group:**

Select the target Group from the **Group** dropdown when creating or editing a member. A member can belong to more than one Group.

{% hint style="info" %}
To link a Form to a Group — so that members in that Group collect specific custom data — go to [Form Management](/subscription-and-billing/flexibill/member-center/form-management).
{% endhint %}

***

## Terms & Conditions

* Each member requires a minimum of a **name** and a **valid email address**
* Bulk upload files must follow the **downloadable template** — custom column structures will not be accepted
* Accepted bulk upload formats: **CSV, XLS, XLSX** — maximum file size **15 MB**
* Member IDs are system-generated and cannot be manually assigned
* A member's Reference ID can be used to map the record to an external system identifier

## FAQ

<details>

<summary>Can I add a Label that does not exist yet when creating a member?</summary>

Yes. Type a new Label name in the Label field during member creation and it will be created on the fly. The new Label is then available for reuse on other members going forward.

</details>

<details>

<summary>What happens to a member's existing data if I re-upload their record in a bulk file?</summary>

If the uploaded file contains a record with the same email address as an existing member, the system will update the existing record with the new data from the file. Review your file carefully before uploading to avoid unintended overwrites.

</details>

<details>

<summary>Can a member be in more than one Group?</summary>

Yes. A member can be assigned to multiple Groups simultaneously. Each Group may be linked to a different Form, and the member will be associated with the data from each.

</details>

<details>

<summary>Can I export my member list?</summary>

Yes. Click the **Export Data** button on the member list page to download the current member list as a file. The export reflects the current filtered view — apply filters before exporting if you want a subset of the database.

</details>

<details>

<summary>What is the Member ID format?</summary>

Member IDs follow the format `CST-XXXX-XXXXXXXXXX` and are generated automatically by the system when a member is created. They are unique identifiers that cannot be manually set or changed.

</details>


# Form Management

{% hint style="info" %}
This page covers **Form Management** — creating and managing custom data collection forms for member groups. For registering members → [Member Management](/subscription-and-billing/flexibill/member-center/member-management)
{% endhint %}

**Form Management** is the custom data layer of Member Center. It allows merchants to design structured forms that capture business-specific information from members — beyond the standard name, email, and phone fields that all members share.

Forms are organized into **Categories** (sections) and **Details** (individual fields). Each Form is linked to one or more **Groups** in Member Management, so that every member in that Group is associated with the right set of custom data fields for their billing context.

## Key Concepts

#### Form

A Form is a named template of data fields. It is the top-level container. Each Form is identified by a **Form ID** (system-generated) and a **Form Name** (merchant-defined). A Form contains one or more Categories.

*Example: "Aerobic Class Intake Form", "New Student Registration Form", "Tenant Profile Form".*

#### Category

A Category is a named section within a Form that groups related Detail fields together. Categorizing data points makes the form easier to read and fill out — especially when a Form has many fields.

*Example: A "New Student Registration Form" might have Categories such as "Personal Information", "Emergency Contact", and "Academic Background".*

#### Detail

A Detail is an individual data field within a Category. For each Detail, merchants configure:

<table><thead><tr><th width="128.20703125">Property</th><th>Description</th></tr></thead><tbody><tr><td><strong>Detail Name</strong></td><td>The label shown to the member when filling out the form.</td></tr><tr><td><strong>Type</strong></td><td>The input type — determines how the field is rendered and what kind of value it accepts. Three types are available: <strong>Form</strong>, <strong>Upload</strong>, and <strong>Multiple Choice</strong>.</td></tr><tr><td><strong>Criteria</strong></td><td>The specific sub-type or format rule within the selected Type. Options depend on which Type is chosen.</td></tr><tr><td><strong>Required</strong></td><td>Whether the field must be completed before the form can be submitted. Check the box to make the field mandatory; leave unchecked to make it optional.</td></tr></tbody></table>

#### Detail Types and Criteria

**📝 Form**

The **Form** type renders a free-text input field. Use it for any data that members enter as written text — names, IDs, notes, numbers, or mixed content.

Select a **Criteria** to constrain what characters the field accepts:

<table><thead><tr><th width="145.26171875">Criteria</th><th>Accepted Input</th><th>Example Use</th></tr></thead><tbody><tr><td><strong>Alphabet</strong></td><td>Letters only (A–Z, a–z). Numbers and special characters are not allowed.</td><td>Member's full name, city of birth, emergency contact name.</td></tr><tr><td><strong>Numeric</strong></td><td>Numbers only (0–9). Letters and special characters are not allowed.</td><td>Student ID number, unit floor number, age, meter reading.</td></tr><tr><td><strong>Alphanumeric</strong></td><td>Both letters and numbers. Special characters are not allowed.</td><td>Reference code, license plate, mixed identifier fields.</td></tr></tbody></table>

*Example: A "Student ID" field — Type: Form, Criteria: Numeric, Required: Yes.*

***

**📎 Upload**

The **Upload** type renders a file attachment field. Use it when members need to submit a document or image as part of their profile data.

Select a **Criteria** to specify the accepted file category and format:

<table><thead><tr><th width="117">Criteria</th><th width="171.93359375">Accepted Formats</th><th>Example Use</th></tr></thead><tbody><tr><td><strong>Image</strong></td><td>PNG, JPEG</td><td>Profile photo, signed consent form scan, ID card photo.</td></tr><tr><td><strong>Document</strong></td><td>PDF, DOCX, XLSX</td><td>Medical clearance letter, signed agreement, enrollment form.</td></tr></tbody></table>

{% hint style="info" %}
When a member submits an Upload field, the file is stored and linked to their member record. The merchant can access the uploaded file from the member's profile in Member Center.
{% endhint %}

*Example: A "Doctor Clearance Letter" field — Type: Upload, Criteria: Document (PDF, DOCX, XLSX), Required: Yes.*

***

**☑️ Multiple Choice**

The **Multiple Choice** type renders a selection field with predefined options. Merchants define the list of choices, and members select from them. Use it for standardized, controlled-vocabulary fields where free text would be inconsistent.

Select a **Criteria** to specify how the options are displayed and how many selections are allowed:

<table><thead><tr><th width="133.84765625">Criteria</th><th>Behavior</th><th>Example Use</th></tr></thead><tbody><tr><td><strong>Checkbox</strong></td><td>Displays options as checkboxes. Members can select <strong>more than one</strong> option simultaneously.</td><td>Skills or interests (multi-select), applicable programs, dietary preferences.</td></tr><tr><td><strong>Radio Button</strong></td><td>Displays options as radio buttons. Members can select <strong>only one</strong> option.</td><td>Fitness level (Beginner / Intermediate / Advanced), gender, membership tier.</td></tr><tr><td><strong>Select Box</strong></td><td>Displays options in a dropdown list. Members can select <strong>only one</strong> option from the dropdown.</td><td>City, country, class session time, preferred language.</td></tr></tbody></table>

*Example: A "Fitness Level" field — Type: Multiple Choice, Criteria: Radio Button, Options: Beginner / Intermediate / Advanced, Required: Yes.*

***

#### Required vs. Optional

Each Detail can be independently set as **Required** or **Optional** regardless of its Type or Criteria.

<table><thead><tr><th width="254.79296875">Setting</th><th>Behavior</th></tr></thead><tbody><tr><td><strong>Required</strong> (checkbox ticked)</td><td>The member cannot submit the form without filling in this field. A visual indicator marks it as mandatory on the member-facing form.</td></tr><tr><td><strong>Optional</strong> (checkbox unticked)</td><td>The field is displayed but the member may leave it blank. The form can still be submitted without a value in this field.</td></tr></tbody></table>

Set a field as Required when the data is essential for billing or operational purposes — for example, a unit number in a property management context or an emergency contact in a fitness intake form. Leave fields Optional when the information is useful but not blocking.

***

## How to Create a Form

{% stepper %}
{% step %}

#### Log In

Log in to the DOKU Dashboard using a verified corporate or international business account.
{% endstep %}

{% step %}

#### Navigate to Member Center — Form Management

From the left navigation menu, select **FlexiBill → Member Center**. On the Member Center page, click the **View Form** button to open the Form Library.
{% endstep %}

{% step %}

#### Open the Add Form Dialog

Click the **+ Add Form** button on the top right of the Form Library page.

<figure><img src="/files/3pszeFqHxnpBB6iWvHXO" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/R86Nmu8wuftDVUhhVuly" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Enter a Form Name

Type a descriptive name for the Form in the **Form Name** field (maximum 256 characters). Choose a name that reflects the billing context or group this Form is designed for.

*Example: "Pilates Class — Member Intake", "Academic Year 2025 Student Form".*
{% endstep %}

{% step %}

#### Add a Category

Enter a **Category Name** and select a **Category Type** from the dropdown. Then click **+ Add Detail** to begin adding fields to this Category.

{% hint style="info" %}
**Category** groups related fields into a named section. Add multiple Categories to structure a long form into logical blocks.
{% endhint %}
{% endstep %}

{% step %}

#### Configure Details

For each Detail field within the Category, fill in:

* **Detail Name** — The field label (e.g., "Fitness Level", "Emergency Contact Phone").
* **Type** — Choose from **Form**, **Upload**, or **Multiple Choice**. The Type determines how the field is rendered and what kind of input it accepts.
* **Criteria** — Select the specific sub-type or format rule for the chosen Type (e.g., Alphabet / Numeric / Alphanumeric for Form; Image / Document for Upload; Checkbox / Radio Button / Select Box for Multiple Choice).
* **Required** — Check the box to make this field mandatory. Leave unchecked to make it optional.

To add more Details to the same Category, click **+ Add Detail** again.

{% hint style="info" %}
See [Detail Types and Criteria](#detail-types-and-criteria) below for a full explanation of each Type and its available Criteria options.
{% endhint %}

{% hint style="info" %}
Drag the handle (≡) on the left of each Detail row to reorder fields within a Category.
{% endhint %}
{% endstep %}

{% step %}

#### Add More Categories *(If Needed)*

Click **+ Add Category** at the bottom of the form to add another section. Repeat the Category and Detail configuration for each section.
{% endstep %}

{% step %}

#### Save the Form

Click **Add Form** to save. The Form is now listed in the Form Library and is available to be linked to Groups in Member Management.
{% endstep %}
{% endstepper %}

***

## Form Library

The Form Library is the central list of all Forms created by the merchant. Access it by clicking **View Form** on the Member Center page.

<figure><img src="/files/RWMi4tcbw5JoJVvarJEO" alt=""><figcaption></figcaption></figure>

Each card in the Form Library displays:

<table><thead><tr><th width="170.94140625">Property</th><th>Description</th></tr></thead><tbody><tr><td><strong>Form ID</strong></td><td>System-generated unique identifier for the Form.</td></tr><tr><td><strong>Form Name</strong></td><td>Merchant-defined name of the Form.</td></tr><tr><td><strong>Category count</strong></td><td>Number of Categories (sections) in the Form.</td></tr><tr><td><strong>Detail count</strong></td><td>Total number of Detail fields across all Categories.</td></tr></tbody></table>

#### Searching Forms

Use the **Search Form** bar at the top of the Form Library to search by **Form Name**. The list filters in real time as you type.

#### Viewing a Form

Click the **eye icon (👁)** on any Form card to preview its full structure — all Categories and their Details — without opening the edit view.

### Edit and Delete Forms

To modify an existing Form or remove it from the library, locate the Form card in the Form Library:

* **Edit** — Click the Form name or edit option to open the Form in edit mode. Modify any Category name, Category Type, Detail fields, or field configuration. Save when done.
* **Delete** — Remove the Form from the library.

{% hint style="warning" %}
Deleting a Form that is currently linked to a Group will remove the Form association from that Group. Members in the Group will no longer be associated with the deleted Form's data fields. Review linked Groups before deleting a Form.
{% endhint %}

### Linking a Form to a Group

A Form only becomes active when it is linked to a **Group** in Member Management. Once linked, all members assigned to that Group are associated with the Form's data fields.

To link a Form to a Group:

1. Navigate to **Member Center → Member Management**.
2. Create a new Group or open an existing Group's settings.
3. Select the target Form from the Form dropdown when configuring the Group.
4. Save the Group configuration.

Members subsequently added to that Group — whether individually or via bulk upload — will be associated with the linked Form.

{% hint style="info" %}
When uploading members in bulk using the **With Form** template, the upload file includes columns for the custom Detail fields from the linked Form. Download the correct template from the Upload Data dialog after selecting **With Form** to get the pre-populated column structure.
{% endhint %}

### Example Form Structures

#### Fitness Studio — Class Intake Form

**Form Name:** Aerobic Class Intake

<table><thead><tr><th>Category</th><th width="188.2109375">Detail Name</th><th width="101.62109375">Type</th><th width="229.19921875">Criteria</th><th width="107.4453125">Required</th></tr></thead><tbody><tr><td>Health Information</td><td>Medical Conditions</td><td>Form</td><td>Alphanumeric</td><td>No</td></tr><tr><td>Health Information</td><td>Doctor Clearance Letter</td><td>Upload</td><td>Document (PDF, DOCX, XLSX)</td><td>Yes</td></tr><tr><td>Health Information</td><td>Pregnancy Status</td><td>Multiple Choice</td><td>Radio Button (Yes / No)</td><td>Yes</td></tr><tr><td>Fitness Background</td><td>Current Fitness Level</td><td>Multiple Choice</td><td>Radio Button (Beginner / Intermediate / Advanced)</td><td>Yes</td></tr><tr><td>Fitness Background</td><td>Previous Classes Attended</td><td>Form</td><td>Alphanumeric</td><td>No</td></tr><tr><td>Emergency Contact</td><td>Contact Name</td><td>Form</td><td>Alphabet</td><td>Yes</td></tr><tr><td>Emergency Contact</td><td>Contact Phone</td><td>Form</td><td>Numeric</td><td>Yes</td></tr><tr><td>Emergency Contact</td><td>Relationship</td><td>Form</td><td>Alphabet</td><td>No</td></tr></tbody></table>

#### Education — New Student Registration

**Form Name:** Form Siswa Baru (New Student Form)

<table><thead><tr><th width="119.3828125">Category</th><th width="196">Detail Name</th><th width="103.7890625">Type</th><th width="233.9375">Criteria</th><th width="107.390625">Required</th></tr></thead><tbody><tr><td>Personal Data</td><td>Student ID Number</td><td>Form</td><td>Numeric</td><td>Yes</td></tr><tr><td>Personal Data</td><td>Program</td><td>Multiple Choice</td><td>Select Box (Regular / Extracurricular / Lab)</td><td>Yes</td></tr><tr><td>Personal Data</td><td>Profile Photo</td><td>Upload</td><td>Image (PNG, JPEG)</td><td>No</td></tr><tr><td>Guardian Information</td><td>Parent/Guardian Name</td><td>Form</td><td>Alphabet</td><td>Yes</td></tr><tr><td>Guardian Information</td><td>Guardian Phone</td><td>Form</td><td>Numeric</td><td>Yes</td></tr><tr><td>Academic Background</td><td>Previous School</td><td>Form</td><td>Alphanumeric</td><td>No</td></tr><tr><td>Academic Background</td><td>Scholarship Status</td><td>Multiple Choice</td><td>Radio Button (Yes / No)</td><td>Yes</td></tr><tr><td>Academic Background</td><td>Applicable Support Programs</td><td>Multiple Choice</td><td>Checkbox (KIP / Beasiswa Yayasan / Bantuan Daerah)</td><td>No</td></tr></tbody></table>

#### Property Management — Tenant Profile

**Form Name:** Tenant Profile — Tower A

<table><thead><tr><th width="153.46484375">Category</th><th width="171.5234375">Detail Name</th><th width="108.98828125">Type</th><th>Criteria</th><th width="107.50390625">Required</th></tr></thead><tbody><tr><td>Unit Information</td><td>Unit Number</td><td>Form</td><td>Alphanumeric</td><td>Yes</td></tr><tr><td>Unit Information</td><td>Floor</td><td>Form</td><td>Numeric</td><td>Yes</td></tr><tr><td>Unit Information</td><td>Parking Slot</td><td>Form</td><td>Alphanumeric</td><td>No</td></tr><tr><td>Utility</td><td>Electricity Meter ID</td><td>Form</td><td>Alphanumeric</td><td>Yes</td></tr><tr><td>Utility</td><td>Water Meter ID</td><td>Form</td><td>Alphanumeric</td><td>Yes</td></tr><tr><td>Lease Details</td><td>Signed Lease Agreement</td><td>Upload</td><td>Document (PDF, DOCX, XLSX)</td><td>Yes</td></tr><tr><td>Lease Details</td><td>Lease Duration</td><td>Multiple Choice</td><td>Select Box (6 Months / 1 Year / 2 Years)</td><td>Yes</td></tr></tbody></table>

## Terms & Conditions

* Form Name maximum length: **256 characters**
* Category Name maximum length: **256 characters**
* A Form must have at least **one Category** with at least **one Detail** to be saved
* Forms can be reused across multiple Groups
* Modifying a Form's Detail fields after members have already submitted data does not retroactively change existing member records

## FAQ

<details>

<summary>Can I use the same Form for multiple Groups?</summary>

Yes. A single Form can be linked to more than one Group. This is useful when different segments share the same data requirements — for example, different fitness classes that all use the same intake form structure.

</details>

<details>

<summary>Can I add a new Category or Detail to a Form after it has already been linked to a Group?</summary>

Yes. You can edit a Form at any time to add, modify, or remove Categories and Details. Changes take effect for new data entries going forward. Existing member records that were saved before the change are not retroactively updated.

</details>

<details>

<summary>What is the difference between Category and Detail?</summary>

A **Category** is a named section that groups related fields together — it is a structural container with no data value of its own. A **Detail** is the individual field within a Category where the actual data value is entered (e.g., a text box, a dropdown, a date picker).

</details>

<details>

<summary>What is the difference between the three Detail Types?</summary>

**Form** — A free-text input field where members type a value. The Criteria (Alphabet, Numeric, or Alphanumeric) controls which characters are accepted.

**Upload** — A file attachment field where members submit a file. The Criteria specifies whether the accepted file is an Image (PNG, JPEG) or a Document (PDF, DOCX, XLSX).

**Multiple Choice** — A selection field with predefined options set by the merchant. The Criteria specifies how options are displayed: Checkbox (multi-select), Radio Button (single select), or Select Box (single select via dropdown).

</details>

<details>

<summary>Can I allow members to select more than one option in a Multiple Choice field?</summary>

Yes — use the **Checkbox** Criteria under Multiple Choice. Checkbox fields allow members to select one or more options simultaneously. If only one selection should be allowed, use **Radio Button** or **Select Box** instead.

</details>

<details>

<summary>Can I reorder the fields within a Category?</summary>

Yes. Each Detail row has a drag handle (≡) on its left side. Drag and drop Detail rows to reorder them within a Category while in the form editor.

</details>

<details>

<summary>What happens to member data if I delete a Detail field from an existing Form?</summary>

Deleting a Detail field from a Form removes it from the form going forward. Existing member records that already contain data in that field retain their saved values in the database — but the field will no longer appear in the Form for new entries or when viewing the member's form profile through the standard form view.

</details>

<details>

<summary>Is there a limit to the number of Categories or Details per Form?</summary>

There is no published hard limit on the number of Categories or Details per Form. Design forms to match your business data requirements — but keep usability in mind: shorter, focused forms tend to be completed more accurately than very long ones.

</details>


# Account Billing

**Account Billing** is FlexiBill's auto-debit engine — designed for businesses that provide ongoing services and need to charge customers automatically at regular intervals. Instead of requiring customers to manually settle an invoice every billing cycle, Account Billing securely stores their payment method once and charges them on schedule without any customer action.

This makes payments effortless for the customer and ensures your business collects revenue on time, every cycle.

## What Is Account Billing?

Account Billing is a **complement to Subscription and Billing** — and can also be used as a **standalone auto-debit solution** independently of the subscription engine.

<table><thead><tr><th width="196.046875">Scenario</th><th>How to Use Account Billing</th></tr></thead><tbody><tr><td><strong>With Subscription and Billing</strong></td><td>Use Subscription and Billing to manage plans, pricing, and invoice records, then layer Account Billing on top to execute the actual charge automatically each cycle — so customers never need to click a payment link.</td></tr><tr><td><strong>Without Subscription and Billing</strong></td><td>Use Account Billing directly to register customer payment methods and execute recurring charges on schedule — without any invoice or subscription structure. Ideal when you manage billing logic in your own system and only need DOKU to execute the charge.</td></tr></tbody></table>

{% hint style="info" %}
**Subscription and Billing** issues invoices that customers pay manually via a payment link. **Account Billing** charges the customer's registered card or bank account automatically — no customer action required after initial registration. Use them together or independently depending on your billing workflow.
{% endhint %}

## Two Scheduler Models

### DOKU Hosted Scheduler

A fully automated billing orchestration model where DOKU manages the entire charge execution lifecycle. Merchants register customer card details once, and DOKU handles all subsequent scheduling and payment processing automatically.

* No need to manage customer token data storage on the merchant side
* Schedule fully managed and executed by DOKU
* One-time centralized data synchronization between merchant platform and DOKU ecosystem
* Real-time registration and payment status callbacks

**Set it once. DOKU charges automatically on schedule.**

👉 [*Learn more*](/subscription-and-billing/flexibill/account-billing/doku-hosted-scheduler)

### Merchant Hosted Scheduler

A merchant-controlled billing model where the merchant manages their own customer token data and triggers payment execution on demand. Gives merchants full control over when and how charges are initiated.

* Merchant manages customer token data storage internally
* Merchant defines and controls the billing schedule
* Supports bulk billing orchestration via file upload (SFTP or Dashboard)
* Suitable for data-driven, internally controlled billing workflows

**You own the schedule. DOKU executes the charge.**

👉 [*Learn more*](/subscription-and-billing/flexibill/account-billing/merchant-hosted-scheduler)

## Features & Benefits

**💳 Automatic Charging — Set and Forget**

Once a customer's payment method is registered, charges are processed automatically on the configured schedule — daily, weekly, or monthly — without any manual trigger from the merchant or the customer.

**🔒 Secure Card Tokenization**

Customer card details are stored using industry-standard PCI-DSS compliant tokenization managed entirely by DOKU. Sensitive card data — card numbers, CVVs, expiry dates — never touches the merchant's server. Merchants work with secure tokens only.

**📊 Real-Time Payment Tracking**

Monitor payment statuses, success rates, and failed charge attempts in real time from the Account Billing dashboard. Always know which customers have been charged and which have not.

**⚡ High-Volume Batch Processing**

Process large volumes of recurring payments simultaneously via bulk file upload through SFTP or the DOKU Dashboard — ideal for businesses with thousands of active customers in a single billing run.

**💰 Steady and Predictable Cash Flow**

Automated charging removes payment friction — customers no longer need to remember to pay, reducing late payments and churn caused by missed invoices.

**🔁 Flexible Billing Cycles**

Supports daily, weekly, monthly, and annual billing cycles — configurable to match any subscription or service model.

## How It Works

{% stepper %}
{% step %}

### Activate Required Payment Channel

Activate required payment channels (Credit Card or Direct Debit) with SALE + RECURRING payment type on your account
{% endstep %}

{% step %}

### Activate Account Billing

Activate the Account Billing feature and configure preferences.
{% endstep %}

{% step %}

### Register Customer Payment Method

Customer registers their card or bank account once — credentials are securely tokenized by DOKU
{% endstep %}

{% step %}

### Charges Run Automatically

On each billing date, DOKU or your own scheduler executes the charge automatically — merchant and customer receive real-time notifications
{% endstep %}
{% endstepper %}

## How Billing Dates Work

Account Billing uses **calendar-based scheduling** — charges are anchored to a fixed day of the month (e.g., the 5th or the 20th), not a relative interval from when the customer registered. Every customer assigned to a billing date is charged on that specific calendar date each cycle.

This is a fundamental difference from Subscription and Billing's interval logic:

<table><thead><tr><th width="163.76953125"></th><th width="325.73828125">Account Billing</th><th>Subscription and Billing</th></tr></thead><tbody><tr><td><strong>Scheduling model</strong></td><td>Calendar-based — fixed day of the month</td><td>Interval-based — relative to subscription start date</td></tr><tr><td><strong>Example</strong></td><td>All customers on the 5th are charged on the 5th of every month</td><td>A subscription starting on the 18th renews on the 18th each month</td></tr><tr><td><strong>When customers are charged</strong></td><td>On the configured billing date, regardless of when they registered</td><td>On the anniversary of their own start date</td></tr><tr><td><strong>Proration</strong></td><td>Not supported — first and all subsequent charges are the full amount</td><td>Not applicable</td></tr><tr><td><strong>Best for</strong></td><td>Batch-oriented billing where all customers settle on the same date(s)</td><td>Individual billing tied to each customer's own start date</td></tr></tbody></table>

### Registration Mid-Cycle

When a customer registers on a date that is not their billing date — for example, they register on the 18th but the billing date is the 5th — the following happens:

{% stepper %}
{% step %}

#### On registration (18th)

A registration charge is attempted for card validation purposes. This charge is immediately **voided** — no actual payment is collected. It exists only to confirm the card is valid and active.
{% endstep %}

{% step %}

#### First real charge

On the **5th of the following month**. The full billing amount is charged with no proration for the days between registration and the first billing date.

```
Customer registers on 18 Jan
    ↓
Void charge on 18 Jan (card validation only — no money collected)
    ↓
First real charge on 5 Feb (full amount)
    ↓
Recurring charge on 5 Mar, 5 Apr, 5 May ...
```

{% endstep %}
{% endstepper %}

{% hint style="info" %}
The void charge on registration day is purely a card validation step. Customers will see a temporary authorization on their bank statement that disappears within a few business days — no money is actually deducted.
{% endhint %}

### Multiple Billing Dates and Retry Logic

Each customer can be assigned their own billing date — merchants are not limited to a single billing date across their entire customer base. This flexibility also enables **retry logic**: a merchant can configure multiple consecutive dates for a single customer's billing cycle (e.g., the 5th, 6th, and 7th), so that if the charge fails on the primary date the system automatically retries on the next configured date.

```
Billing dates configured: 5th, 6th, 7th

5 Feb — charge attempt → FAILED (insufficient funds)
6 Feb — retry attempt  → FAILED (card temporarily blocked)
7 Feb — retry attempt  → SUCCESS ✅
```

{% hint style="warning" %}
If **Send One Bill/Month** is enabled in Bill Execution Preferences, only the first **successful** charge within a calendar month counts. All subsequent charge attempts in the same month — including retry dates — are automatically skipped once a successful charge has been recorded for that customer. This prevents double-charging when a customer is successfully charged on a retry date.
{% endhint %}

### No Proration

Account Billing currently does not support proration. Customers who register mid-cycle are always charged the **full billing amount** on their first billing date, regardless of how many days remain between their registration date and that first charge. If your business model requires prorated first charges, this must be handled outside of Account Billing.

## Scheduler Comparison

<table><thead><tr><th width="188.515625">Aspect</th><th width="265.65625">DOKU Hosted Scheduler</th><th>Merchant Hosted Scheduler</th></tr></thead><tbody><tr><td><strong>Scheduling control</strong></td><td>Fully managed by DOKU</td><td>Merchant-defined, on-demand</td></tr><tr><td><strong>Token management</strong></td><td>DOKU stores and manages tokens</td><td>Merchant manages tokens internally</td></tr><tr><td><strong>Data flow</strong></td><td>One-time sync, DOKU handles the rest</td><td>Merchant uploads data per cycle</td></tr><tr><td><strong>Best for</strong></td><td>Real-time online registration flows</td><td>Bulk billing with internal data control</td></tr><tr><td><strong>Primary Value add</strong></td><td>Seamless ecosystem integration</td><td>Data-driven, internal execution control</td></tr><tr><td><strong>Touch points</strong></td><td>API, Back Office (no-code)</td><td>API, Back Office (no-code), SFTP</td></tr></tbody></table>

## Use Cases

{% tabs %}
{% tab title="SaaS" %}

<table><thead><tr><th width="151.66796875"></th><th>Details</th></tr></thead><tbody><tr><td><strong>Description</strong></td><td>A SaaS platform needs to automatically charge customers a monthly or annual software subscription fee without requiring them to log in and pay each cycle.</td></tr><tr><td><strong>Solution</strong></td><td>Use <strong>DOKU Hosted Scheduler</strong> — customers register their card once during onboarding, and DOKU charges them automatically on the billing date each cycle. Combined with Subscription and Billing if an invoice record is required; used standalone if billing is managed in the SaaS platform itself.</td></tr><tr><td><strong>How It Works</strong></td><td>Customer registers card via API → DOKU tokenizes and stores credentials → charge executed automatically on schedule → success/failure notification sent to merchant.</td></tr><tr><td><strong>Features Used</strong></td><td>DOKU Hosted Scheduler, Credit Card Tokenization, Real-time Notification</td></tr></tbody></table>
{% endtab %}

{% tab title="Insurance" %}

<table><thead><tr><th width="148.72265625"></th><th>Details</th></tr></thead><tbody><tr><td><strong>Description</strong></td><td>An insurance provider needs to collect quarterly or annual premium payments from thousands of policyholders on a specific calendar date.</td></tr><tr><td><strong>Solution</strong></td><td>Use <strong>Merchant Hosted Scheduler</strong> — the insurance system manages the billing schedule internally and triggers bulk payment execution via SFTP file upload on the designated date. Used standalone; no Subscription and Billing invoice is required.</td></tr><tr><td><strong>How It Works</strong></td><td>Merchant prepares billing file → uploads via SFTP → DOKU processes bulk charges on schedule → consolidated report generated for reconciliation.</td></tr><tr><td><strong>Features Used</strong></td><td>Merchant Hosted Scheduler, SFTP Batch Processing, Reporting</td></tr></tbody></table>
{% endtab %}

{% tab title="Fitness" %}

<table><thead><tr><th width="147.7734375"></th><th>Details</th></tr></thead><tbody><tr><td><strong>Description</strong></td><td>A gym chain charges monthly membership dues for thousands of members automatically on the 1st of each month, and also issues an invoice for each member's records.</td></tr><tr><td><strong>Solution</strong></td><td>Use <strong>DOKU Hosted Scheduler</strong> layered on top of <strong>Subscription and Billing</strong> — Subscription and Billing manages the plan and invoice, and Account Billing executes the automatic charge so members are never required to pay manually.</td></tr><tr><td><strong>How It Works</strong></td><td>Member subscribes to plan (Subscription and Billing) → registers card at checkout → DOKU tokenizes card → on the 1st of each month, DOKU executes charge for all active members → invoice marked as paid automatically.</td></tr><tr><td><strong>Features Used</strong></td><td>DOKU Hosted Scheduler, Direct Debit, Subscription and Billing Integration</td></tr></tbody></table>
{% endtab %}

{% tab title="Education" %}

<table><thead><tr><th width="152.84765625"></th><th>Details</th></tr></thead><tbody><tr><td><strong>Description</strong></td><td>A school wants to collect monthly tuition fees from hundreds of students via auto-debit, while also keeping invoice records for parents.</td></tr><tr><td><strong>Solution</strong></td><td>Use <strong>Merchant Hosted Scheduler</strong> combined with <strong>Subscription and Billing</strong> — the school manages the student roster and triggers charges each month via Dashboard file upload. Subscription and Billing generates the invoice record for each student.</td></tr><tr><td><strong>How It Works</strong></td><td>Students registered as members (Member Center) → subscription created per student (Subscription and Billing) → school uploads monthly charge file (Merchant Hosted Scheduler) → charges executed and invoices auto-marked as paid.</td></tr><tr><td><strong>Features Used</strong></td><td>Merchant Hosted Scheduler, Subscription and Billing, Member Center</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

## Merchant & Customer Experience

### Merchant View

* Activate Account Billing and configure prerequisite payment channels (Credit Card RECURRING/MOTO or Direct Debit)
* Choose DOKU Hosted Scheduler or Merchant Hosted Scheduler based on operational model
* Register customer billing data via API, Dashboard (no-code), or SFTP file upload
* Monitor payment status, success rates, and failed charges from the Account Billing dashboard
* Configure Bill Execution Preferences — execution time window, duplicate charge protection, fraud filtering, and notification callback URLs

### Customer View

* Registers their card or bank account once during the initial checkout or onboarding flow
* Receives a confirmation notification when their payment method is successfully registered
* Is charged automatically on each billing date — no action required on subsequent cycles
* Receives a payment confirmation notification after each successful charge

## Terms & Conditions

* Account Billing requires at least one compatible payment channel to be active on your DOKU account:
  * **Credit Card** with payment type **SALE, RECURRING** or **MOTO**, **or**
  * **Direct Debit** for automated bank account deductions
* Contact your **DOKU Account Manager** to verify and activate the required payment channels before proceeding
* Must be registered with a **corporate business account** on DOKU Dashboard
* Business must be **KYB (Know Your Business) verified** on DOKU Dashboard
* Account Billing Merchant Hosted Scheduler is available for **Indonesian Business Accounts** only

## FAQ

<details>

<summary>What is the difference between Account Billing and Subscription and Billing?</summary>

**Subscription and Billing** is invoice-based — the system issues an invoice and the customer pays manually via a payment link each cycle. The customer is an active participant in every payment.

**Account Billing** is charge-based — the system charges the customer's registered card or bank account automatically on schedule. The customer registers once; all subsequent charges happen without their involvement.

<table><thead><tr><th width="152.796875"></th><th>Subscription and Billing</th><th>Account Billing</th></tr></thead><tbody><tr><td><strong>How customers pay</strong></td><td>Manually via payment link</td><td>Automatically charged — no action needed</td></tr><tr><td><strong>Billing trigger</strong></td><td>Invoice issued → customer pays</td><td>Card charged directly on schedule</td></tr><tr><td><strong>Payment methods</strong></td><td>Any DOKU-supported method</td><td>Credit Card (RECURRING/MOTO) or Direct Debit only</td></tr><tr><td><strong>Best for</strong></td><td>Invoice-based billing workflows</td><td>Seamless, invisible auto-debit</td></tr></tbody></table>

</details>

<details>

<summary>Can I use Account Billing without Subscription and Billing?</summary>

Yes. Account Billing works fully independently of Subscription and Billing. If your business manages billing logic in its own system and only needs DOKU to execute the actual charge against a stored card or bank account, you can use Account Billing standalone — without creating any collection, plan, or subscription in FlexiBill.

</details>

<details>

<summary>Can I use Account Billing together with Subscription and Billing?</summary>

Yes. This is the recommended approach when you need both invoice records and automatic payment collection. Subscription and Billing manages the plan, pricing, and invoice generation — Account Billing executes the automatic charge each cycle so the customer's invoice is settled without manual payment. The invoice is automatically marked as paid after a successful charge.

</details>

<details>

<summary>What is the difference between DOKU Hosted Scheduler and Merchant Hosted Scheduler?</summary>

**DOKU Hosted Scheduler** is a fully hands-off model — once customer data is registered, DOKU manages the schedule and executes all charges automatically. Best for real-time online onboarding flows where customers register directly.

**Merchant Hosted Scheduler** gives the merchant full control — the merchant manages customer token data internally and triggers charges on demand via API, Dashboard upload, or SFTP. Best for businesses with their own billing system that want to use DOKU only for charge execution.

</details>

<details>

<summary>What payment methods are supported for Account Billing?</summary>

Account Billing supports:

* **Credit Card** — with SALE + RECURRING payment type (for subsequent recurring charges after an initial customer-present transaction) or MOTO (Mail Order Telephone Order, for charges processed without the customer being present)
* **Direct Debit** — automated deductions from a customer's linked bank account after the initial mandate is established

Contact your DOKU Account Manager to verify which channels are available and active on your account.

</details>

<details>

<summary>What happens if a charge fails?</summary>

Failed charges are logged and the merchant receives a notification via the configured Payment Execution Notification URL (set in Bill Execution Preferences). The system supports retry logic and, if **Freeze the Card** is enabled, automatically bypasses cards previously flagged by the processor as Stolen, Frozen, or Restricted — avoiding unnecessary transaction fees on repeat failures.

</details>

<details>

<summary>Is customer card data stored on the merchant's server?</summary>

No. Customer card details are tokenized using PCI-DSS compliant vaulting managed entirely by DOKU. Sensitive data — card numbers, CVVs, expiry dates — never touches the merchant's server. Merchants work with secure tokens only, and DOKU handles all credential storage and security compliance.

</details>

<details>

<summary>What is the "Send One Bill/Month" setting?</summary>

When enabled in Bill Execution Preferences, this setting ensures that a customer is only successfully charged once per calendar month — even if multiple billing dates are configured. Any duplicate charge attempts within the same calendar month are automatically marked as `ALREADY_PAID` without hitting the bank, preventing accidental double-charges.

</details>

<details>

<summary>Does Account Billing support dynamic (usage-based) billing amounts?</summary>

Yes, via the **URL Amount** setting in Bill Execution Preferences. If the billing amount varies per cycle, you can configure an endpoint URL that the system queries just before each scheduled charge. The system uses the `billing_amount` returned by your endpoint for that transaction — enabling fully dynamic recurring billing without manual file uploads each cycle.

</details>

<details>

<summary>Why does Account Billing use a fixed calendar date instead of a relative interval?</summary>

Calendar-based billing is designed for batch-oriented operations where a merchant needs all charges for a given cycle to run on the same date — making reconciliation, reporting, and retry management predictable and operationally simple. It is particularly suited for businesses like insurance, utilities, and gym memberships where billing runs on a company-defined schedule rather than each customer's individual registration anniversary.

For billing that follows each customer's own start date (interval-based), use Subscription and Billing instead.

</details>

<details>

<summary>What happens to a customer who registers on the 18th when the billing date is the 5th?</summary>

On registration (18th), a void charge is executed purely to validate the card — no money is collected. The first real charge happens on the 5th of the following month at the full billing amount. There is no proration for the days between registration and the first billing date.

</details>

<details>

<summary>Can I configure retry dates if a charge fails on the primary billing date?</summary>

Yes. You can assign multiple consecutive billing dates to a single customer (e.g., the 5th, 6th, and 7th). If the charge fails on the 5th, the system automatically retries on the 6th, and again on the 7th if needed. If **Send One Bill/Month** is enabled, once a retry succeeds, all remaining dates for that month are skipped automatically to prevent double-charging.

</details>

<details>

<summary>Can different customers have different billing dates?</summary>

Yes. Each customer can be assigned their own billing date independently. There is no restriction to a single billing date per merchant account — you can have some customers on the 5th, others on the 15th, and others on the 20th simultaneously.

</details>

<details>

<summary>Does Account Billing support proration for customers who join mid-cycle?</summary>

No. Account Billing does not currently support proration. The first charge on the billing date is always the full billing amount, regardless of when the customer registered. If your business requires prorated charges for new customers, this calculation must be handled in your own system before registering the customer into Account Billing.

</details>


# Account Billing Activation

{% hint style="info" %}
This page is a tutorial for activating **Account Billing**. For a full feature overview → [Account Billing](/subscription-and-billing/flexibill/account-billing)
{% endhint %}

Learn how to activate Account Billing on your DOKU Dashboard. Before the feature can be used, at least one compatible payment channel must be enabled and configured on your account — and this requires coordination with your DOKU Account Manager.

## Prerequisites

Account Billing activation has two tiers of prerequisites with different owners and lead times.

#### Tier 1 — Platform (Self-Serve)

* [ ] **FlexiBill is activated** — [Activate FlexiBill](/subscription-and-billing/flexibill/activation)

This step is self-serve and takes effect immediately.

#### Tier 2 — Payment Channel (Requires Account Manager)

* [ ] At least one of the following payment channels is active on your DOKU account:
  * **Credit Card** — with the correct payment type combination for your acquirer
  * **Direct Debit** — for the specific bank issuer(s) available on your account

{% hint style="warning" %}
Payment channel activation is **not self-serve**. It requires coordination with your DOKU Account Manager and may involve acquirer review. Allow several business days before the channel is active. Complete Tier 2 before starting the activation steps below.
{% endhint %}

## Payment Channel Requirements

#### Credit Card

Account Billing requires **two Credit Card payment types working together**: one for the initial card tokenization (SALE) and one for all subsequent recurring charges (RECURRING or MOTO). Both must be active on your account.

**Payment Types**

<table><thead><tr><th width="133.85546875">Payment Type</th><th width="419.22265625">Role</th><th>Required</th></tr></thead><tbody><tr><td><strong>SALE</strong></td><td>Handles the initial card tokenization — the registration transaction that securely vaults the customer's card as a token. This is the void charge executed when a customer first registers.</td><td>✅ Always required</td></tr><tr><td><strong>RECURRING</strong></td><td>Processes all subsequent auto-debit charges against the stored token, using a RECURRING transaction flag.</td><td>✅ If your acquirer supports RECURRING</td></tr><tr><td><strong>MOTO</strong></td><td>Processes all subsequent auto-debit charges against the stored token, using a MOTO (Mail Order Telephone Order) transaction flag. Alternative to RECURRING for acquirers that use MOTO for card-not-present recurring charges.</td><td>✅ If your acquirer supports MOTO</td></tr></tbody></table>

**Valid Combinations**

The combination you need is **determined by your acquirer** — not a merchant preference. Both combinations always include SALE:

<table><thead><tr><th width="191.8828125">Combination</th><th>When It Applies</th></tr></thead><tbody><tr><td><strong>SALE + RECURRING</strong></td><td>Your acquirer processes recurring auto-debit charges using the RECURRING transaction flag</td></tr><tr><td><strong>SALE + MOTO</strong></td><td>Your acquirer processes recurring auto-debit charges using the MOTO transaction flag</td></tr></tbody></table>

{% hint style="info" %}
**Not sure which combination applies to you?** Ask your DOKU Account Manager: *"For my Credit Card acquirer, should I request SALE + RECURRING or SALE + MOTO for Account Billing?"* They will confirm the correct combination based on your acquirer's configuration.
{% endhint %}

**Why SALE Is Always Required**

SALE is the tokenization transaction. When a customer registers their card, Account Billing executes a SALE charge that is immediately voided — no money is collected. This step creates the secure token that all future RECURRING or MOTO charges are billed against. Without SALE, there is no token, and no subsequent charge can be processed.

→ See [How Billing Dates Work](/subscription-and-billing/flexibill/account-billing#how-billing-dates-work) for the full registration flow including the void charge behavior.

#### Direct Debit

Direct Debit enables automated balance deductions directly from a customer's linked bank account. There are no payment type variants — activation is straightforward. However, Direct Debit availability is **issuer-specific**: the bank issuers available to your account depend on your acquirer configuration.

* Customer authorizes the debit mandate once during registration
* Subsequent charges are pulled automatically from their bank account on each billing date
* No card credential re-entry required for future billing cycles

{% hint style="info" %}
Contact your **DOKU Account Manager** to confirm which bank issuers are available for Direct Debit on your account before requesting activation. Currently support MANDIRI and BRI.
{% endhint %}

## Step-by-Step Guide

{% stepper %}
{% step %}

#### Open Account Billing

Log in to [DOKU Dashboard](https://dashboard.doku.com/), then navigate to **FlexiBill → Account Billing** from the left sidebar.

If Account Billing has never been activated, you will land on the activation page.

<figure><img src="/files/9iTnK75LQJkw8tGL2wA3" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Review and Agree to Terms & Conditions

Read the Account Billing Terms & Conditions and click **Agree** to proceed.
{% endstep %}

{% step %}

#### Verify Payment Channel Status

The dashboard displays the current activation status of your payment channels under the **Cards**, **Direct Debit**, and **e-Wallet** tabs.

<figure><img src="/files/FZhXNoYF7u6XJesXCkYX" alt=""><figcaption></figcaption></figure>

**Channel status states:**

<table><thead><tr><th width="169.48828125">Status</th><th>Description</th></tr></thead><tbody><tr><td><strong>Active</strong></td><td>The channel is live and ready to use for Account Billing. Proceed to Step 4.</td></tr><tr><td><strong>Pending</strong></td><td>A channel activation request has been submitted and is awaiting acquirer review. No action needed — wait for approval confirmation from your Account Manager.</td></tr><tr><td><strong>No Data / Inactive</strong></td><td>No compatible channel is active. An <strong>"Account Billing Cannot Be Used Yet"</strong> banner will appear.</td></tr></tbody></table>

If no compatible channel is active, click **Request Activation** to submit a channel activation request to DOKU.

{% hint style="warning" %}
If you are requesting Credit Card activation, specify the correct payment type combination for your acquirer (SALE + RECURRING or SALE + MOTO) when submitting the request. An incorrect combination will require a resubmission and extend the activation timeline.
{% endhint %}
{% endstep %}

{% step %}

#### Configure Bill Execution Preferences

<img src="/files/xMqGnidQ0wOn716YYabh" alt="Bill execution Preferences" height="307" width="624">

Once at least one compatible payment channel shows **Active** status, click **Next** to configure your billing execution settings:

<table><thead><tr><th width="225.99609375">Setting</th><th>Description</th></tr></thead><tbody><tr><td><strong>Time Execution</strong></td><td>The daily time window (HH:MM WIB) when the scheduler attempts to process charges on each billing date. Default: 00:00 WIB.</td></tr><tr><td><strong>Send One Bill/Month</strong></td><td>When enabled, ensures a customer is only successfully charged once per calendar month — even if multiple billing dates or retry dates are configured. All subsequent attempts in the same month after a successful charge are automatically set to <code>ALREADY_PAID</code>.</td></tr><tr><td><strong>Freeze the Card</strong></td><td>When enabled, automatically bypasses cards previously flagged by the processor as Stolen, Frozen, or Restricted — avoids unnecessary transaction fees on cards that will not succeed.</td></tr><tr><td><strong>URL Amount</strong></td><td>(Optional) For dynamic billing amounts — provide an endpoint URL that the system queries just before each scheduled charge to retrieve the exact <code>billing_amount</code> for that cycle.</td></tr><tr><td><strong>URL Notification</strong></td><td>(Optional) Default fallback endpoint for receiving payment execution results for every automated charge attempt.</td></tr><tr><td><strong>New Recurring Alert URL</strong></td><td>(Optional) Default endpoint for receiving success callbacks when a customer's card is registered and tokenized.</td></tr></tbody></table>

{% hint style="info" %}
**Time Execution** and **Send One Bill/Month** work together with calendar-based billing dates. If you configure retry dates (e.g., 5th, 6th, 7th) for a customer, Time Execution controls what time charges are attempted on each of those dates, and Send One Bill/Month ensures the customer is not charged again once a retry succeeds. → [How Billing Dates Work](broken://pages/5151f0d346add81e168768d4331dc6deac895a9a#how-billing-dates-work)
{% endhint %}

Click **Save** to apply the configuration.
{% endstep %}

{% step %}

#### Complete Activation

Once at preference configured, click **Next** to complete the activation process.

Account Billing is now ready to use.

<figure><img src="/files/CgMSZNWpnDDqskdpn8IA" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

## What's Next

Once Account Billing is activated and configured, choose your integration model:

* 👉 [DOKU Hosted Scheduler](broken://pages/3ce41dce1fe775c299e446263889b1d436839282) — Let DOKU fully manage the billing schedule and charge execution
* 👉 [Merchant Hosted Scheduler](broken://pages/6a64ce07cd943d1376872313cc430f4169464bff) — Control your own billing schedule and trigger charges on demand
* 👉 [Connectivity & File Security (SFTP)](broken://pages/9b7dbec1aadfd9548c89eb6bc5c2645118f726eb) — Set up secure SFTP access for bulk file-based billing operations

## FAQ

<details>

<summary>Why is SALE always required even though Account Billing charges customers automatically?</summary>

SALE is the tokenization step — it creates the secure card token that all future auto-debit charges are billed against. Without an initial SALE transaction, no token exists and no RECURRING or MOTO charge can be processed. The SALE on registration day is immediately voided, so no money is collected — it is purely a technical prerequisite for tokenization.

</details>

<details>

<summary>What is the difference between RECURRING and MOTO for subsequent charges?</summary>

Both process auto-debit charges against a stored card token — the difference is in the transaction flag sent to the acquirer. RECURRING uses a recurring transaction flag; MOTO uses a Mail Order Telephone Order flag. The behavior for Account Billing is the same from the merchant's perspective. Which one you use is determined by your acquirer, not your preference — confirm with your DOKU Account Manager.

</details>

<details>

<summary>How do I know which Credit Card combination — SALE + RECURRING or SALE + MOTO — applies to my account?</summary>

Ask your DOKU Account Manager. The correct combination depends on which acquirer processes your Credit Card transactions and which transaction flags that acquirer supports for recurring billing. Your Account Manager will confirm the exact combination to request.

</details>

<details>

<summary>How long does payment channel activation take?</summary>

Payment channel activation requires acquirer review and is not instant. Allow several business days from the time you submit the request. Your DOKU Account Manager will notify you once the channel is active. You can check the current request status under the **Cards** or **Direct Debit** tabs on the Payment Method screen in the dashboard.

</details>

<details>

<summary>Can I use both Credit Card and Direct Debit at the same time?</summary>

Yes. Both channels can be active simultaneously. Each individual customer registration specifies which payment method to use for their recurring charges — the two channels operate independently.

</details>


# DOKU Hosted Scheduler

**DOKU Hosted Scheduler** is a fully automated billing model where DOKU manages the entire charge execution lifecycle on behalf of the merchant. The merchant configures the billing rules once via API, shares a checkout link with the customer, and DOKU handles tokenization and all subsequent automatic charges on schedule — no token management required on the merchant side.

***

## Features & Benefits

**⚙️ Zero Scheduling Overhead**

DOKU manages the entire billing schedule automatically. Merchants configure billing rules once and the system executes all subsequent charges without any further intervention.

**🔒 No Token Management Required**

Customer card credentials are tokenized and stored securely by DOKU in a PCI-DSS compliant vault. Merchants only need to store the `billing_number` — no raw card data or tokens ever touch the merchant's server.

**🛒 Hosted Checkout Registration**

DOKU provides a hosted checkout page for card registration. Merchants share the checkout URL with customers — customers fill in their own card details in a secure, DOKU-hosted environment. No card data passes through the merchant's platform.

**🔄 Two Registration Flows**

Supports **Customer Initiate (CI)** for real-time online registration via a checkout link, and **Merchant Initiate (MI)** for bulk batch registration via SFTP or Dashboard file upload.

**📬 Automated Callbacks**

Real-time notifications sent to your configured endpoints for every registration success and payment execution event.

***

## How It Works

{% tabs %}
{% tab title="Customer Initiate (CI)" %}
The Customer Initiate flow is designed for real-time online registration. The merchant calls the Register Bill API to configure the billing rules, receives a checkout URL, and shares it with the customer. The customer fills in their card details on the DOKU-hosted checkout page and pays a registration fee — which is immediately voided. DOKU then tokenizes the card and activates the billing schedule.

* Full programmatic control over the registration flow
* Ideal for web and mobile application onboarding
* Real-time registration confirmation via API response and callback

<img src="/files/5fi4grl4UykShfJBKkRg" alt="" height="397.1044386422976" width="350">

{% stepper %}
{% step %}

#### Call Register Bill API

The merchant's backend calls the Register Bill API to configure the billing rules. The API response returns a `paymentLink` — the checkout URL the customer uses to register their card.

**Endpoint:**

<table><thead><tr><th width="98.7578125">Aspect</th><th>Sandbox</th><th>Production</th></tr></thead><tbody><tr><td><strong>Method</strong></td><td><code>POST</code></td><td><code>POST</code></td></tr><tr><td><strong>URL</strong></td><td><code>https://api-sandbox.doku.com/ab-core-api/v1/billing-registration</code></td><td><code>https://api.doku.com/ab-core-api/v1/billing-registration</code></td></tr></tbody></table>

**Request Headers:**

<table><thead><tr><th width="177.27734375">Header</th><th>Description</th></tr></thead><tbody><tr><td><code>Client-Id</code></td><td>Client ID retrieved from DOKU Back Office</td></tr><tr><td><code>Request-Id</code></td><td>Unique random string (max 128 characters) generated by the merchant to prevent duplicate requests</td></tr><tr><td><code>Request-Timestamp</code></td><td>Request timestamp in ISO 8601 UTC+0 format. For WIB (UTC+7), subtract 7 hours — e.g., 08:51 WIB = <code>2020-09-22T01:51:00Z</code></td></tr><tr><td><code>Signature</code></td><td>HMAC-SHA256 signature generated on the merchant backend. → Authentication</td></tr></tbody></table>

**Request Body:**

```json
{
  "order": {
    "amount": 12000,
    "invoiceNumber": "INV20250724081",
    "currency": "IDR",
    "language": "ID",
    "disableRetryPayment": true,
    "lineItems": [
      {
        "id": "ITEM-001",
        "name": "Monthly Gym Membership",
        "quantity": 1,
        "price": 12000
      }
    ]
  },
  "payment": {
    "paymentDueDate": 8640
  },
  "customer": {
    "id": "CUST029",
    "name": "Yuni",
    "lastName": "Customer 029",
    "phone": "08123456795",
    "email": "customer@email.com"
  },
  "recurring": {
    "billNumber": "BILL2025072415",
    "billDetail": "Monthly Gym Membership",
    "billType": "BILLING_PAYMENT",
    "startDate": "2025-10-28T07:23:00Z",
    "endDate": "2026-10-28T07:23:00Z",
    "executeType": "DATE",
    "executeDate": "5;6;7",
    "executeMonth": "JAN;FEB;MAR;APR;MAY;JUN;JUL;AUG;SEP;OCT;NOV;DEC",
    "flatStatus": true
  }
}
```

For order, payment, customer, shipping address, billing address, additional info object, refer to[ DOKU Checkout Integration Guide](https://developers.doku.com/accept-payments/doku-checkout/integration-guide/backend-integration)

**Recurring Object Parameters:**

<table data-header-hidden="false" data-header-sticky><thead><tr><th width="132.50390625">Parameter</th><th width="81.22265625">Type</th><th width="106.95703125">Required</th><th width="94.18359375">Length</th><th>Description</th></tr></thead><tbody><tr><td><code>billNumber</code></td><td>String (ANS)</td><td>✅</td><td>20</td><td>Unique bill identifier for reference. Must be unique per merchant account.</td></tr><tr><td><code>billDetail</code></td><td>String</td><td>Optional</td><td>—</td><td>Product or service description.</td></tr><tr><td><code>billType</code></td><td>Enum</td><td>Optional</td><td>—</td><td><code>BILLING_PAYMENT</code> — if integrated with DOKU Switching (for utility billers). <code>PAYMENT</code> — standard billing.</td></tr><tr><td><code>startDate</code></td><td>Date</td><td>✅</td><td>—</td><td>Recurring schedule start date. ISO 8601 UTC+0 format.</td></tr><tr><td><code>endDate</code></td><td>Date</td><td>✅</td><td>—</td><td>Recurring schedule end date. ISO 8601 UTC+0 format.</td></tr><tr><td><code>executeType</code></td><td>Enum</td><td>✅</td><td>8</td><td>Determines how billing dates are defined. See Execute Type below.</td></tr><tr><td><code>executeDate</code></td><td>String</td><td>✅</td><td>2048</td><td>The dates on which charges are executed. Format depends on <code>executeType</code>. Multiple values separated by semicolons. See Execute Type.</td></tr><tr><td><code>executeMonth</code></td><td>String</td><td>Optional</td><td>256</td><td>Months in which charges are executed. Required when <code>executeType</code> is <code>DATE</code>. Values: <code>JAN;FEB;MAR</code> etc. Omit when <code>executeType</code> is <code>FULLDATE</code>.</td></tr><tr><td><code>flatStatus</code></td><td>Boolean</td><td>✅</td><td>5</td><td><code>true</code> — fixed billing amount, DOKU uses the <code>order.amount</code> value. <code>false</code> — dynamic amount, DOKU fetches <code>billing_amount</code> from your <strong>URL Amount</strong> endpoint before each charge.</td></tr></tbody></table>

**Execute Type**

`executeType` controls how billing dates are defined for the recurring schedule. Account Billing uses **calendar-based scheduling** — charges run on specific dates, not relative intervals.

<table data-header-hidden="false" data-header-sticky><thead><tr><th width="103.57421875">executeType</th><th width="140.97265625">executeDate Format</th><th width="104.56640625">executeMonth</th><th width="137.9140625">Description</th><th>Example</th></tr></thead><tbody><tr><td><code>DAY</code></td><td>Day abbreviations: <code>MON</code> / <code>TUE</code> / <code>WED</code> / <code>THU</code> / <code>FRI</code> / <code>SAT</code> / <code>SUN</code></td><td>Not used</td><td>Charges run on specific days of the week</td><td><code>executeDate: "MON;THU"</code> — charge every Monday and Thursday</td></tr><tr><td><code>DATE</code></td><td>Day numbers: <code>1</code> through <code>28</code></td><td>Required — list of months</td><td>Charges run on specific dates of the month, for specified months</td><td><code>executeDate: "5;6;7"</code>, <code>executeMonth: "JAN;FEB;..."</code> — charge on 5th (primary) + 6th and 7th (retry) each month</td></tr><tr><td><code>FULLDATE</code></td><td>Specific dates in <code>yyyyMMdd</code> format</td><td>Leave empty</td><td>Charges run on exact calendar dates</td><td><code>executeDate: "20251005;20251105"</code> — charge only on Oct 5 and Nov 5 2025</td></tr></tbody></table>

{% hint style="info" %}
**Retry logic with `DATE`:** Pass multiple consecutive dates in `executeDate` (e.g., `"5;6;7"`) to configure automatic retry — if the charge fails on the 5th, the system retries on the 6th, then the 7th. → How Billing Dates Work
{% endhint %}

{% hint style="warning" %}
Maximum date value for `DATE` type is **28**. Day 29, 30, and 31 are not supported to ensure consistent execution across all calendar months.
{% endhint %}

**Dynamic Amount**

By default, Account Billing charges the same fixed amount every cycle — the `order.amount` value from the registration request, with `flatStatus: true`.

If the billing amount varies per cycle (e.g., usage-based billing, tiered plans, or externally calculated charges), set `flatStatus: false`. When this is set, DOKU will **not** use the `order.amount` value for recurring charges. Instead, just before each scheduled charge, DOKU calls the **URL Amount** endpoint configured in your Bill Execution Preferences to retrieve the exact amount for that specific cycle.

<table data-header-hidden="false" data-header-sticky><thead><tr><th width="113.66796875">flatStatus</th><th width="211.546875">Amount Source</th><th>Use When</th></tr></thead><tbody><tr><td><code>true</code></td><td><code>order.amount</code> from the registration request — same every cycle</td><td>Billing amount is fixed and does not change between cycles</td></tr><tr><td><code>false</code></td><td>Fetched from your <strong>URL Amount</strong> endpoint before each charge</td><td>Billing amount varies per cycle — DOKU queries your system for the current value</td></tr></tbody></table>

**How the URL Amount endpoint works:**

When `flatStatus` is `false`, DOKU sends a request to your URL Amount endpoint before executing each scheduled charge. Your endpoint must return a `billing_amount` value for the current cycle. DOKU uses this returned value as the charge amount for that execution.

```
Before each charge:
DOKU ──▶ GET {URL Amount endpoint}?bill_number=BILL2025072415&customer_id=CUST029
DOKU ◀── { "billing_amount": 15000 }
DOKU charges customer: IDR 15,000
```

**Configure the URL Amount endpoint** under **Settings → Account Billing → Bill Detail Setting → URL Amount**.

Additionally, `billType` determines where DOKU fetches the dynamic amount from:

<table data-header-hidden="false" data-header-sticky><thead><tr><th width="169.14453125">billType</th><th>Dynamic Amount Source</th></tr></thead><tbody><tr><td><code>PAYMENT</code></td><td>DOKU fetches <code>billing_amount</code> from <strong>your system</strong> via the URL Amount endpoint</td></tr><tr><td><code>BILLING_PAYMENT</code></td><td>DOKU fetches <code>billing_amount</code> from <strong>DOKU Switching</strong> — used for external billers such as utility or BPJS payments</td></tr></tbody></table>

{% hint style="info" %}
If `flatStatus` is `false` and no **URL Amount** endpoint is configured in Bill Execution Preferences, the charge for that cycle will fail. Ensure the endpoint is live, accessible, and returns a valid `billing_amount` value before setting `flatStatus: false`.
{% endhint %}

**API Response:**

<table><thead><tr><th width="141.25390625">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>code</code></td><td>Response status. <code>success</code> indicates the bill was registered and the checkout link is ready.</td></tr><tr><td><code>paymentLink</code></td><td>The checkout URL to share with the customer for card registration.</td></tr></tbody></table>

{% tabs %}
{% tab title="✅ Bill Registered" %}
**HTTP 200 — Bill registered successfully, checkout link ready.**

```json
{
  "code": "success",
  "type": "success",
  "message": "Success",
  "paymentLink": "https://checkout.doku.com/checkout-link-v2/e615781030584d86..."
}
```

Share the `paymentLink` with the customer. The link takes them to the DOKU-hosted card registration checkout page.
{% endtab %}

{% tab title="❌ Duplicate Bill Number" %}
**HTTP 400 — `billNumber` already registered.**

The `billNumber` passed in `recurring.billNumber` has already been used in a previous registration request.

```json
{
  "code": "FAILED",
  "message": "Bill number already registered"
}
```

**Resolution:** Each `billNumber` must be unique per merchant account. Use a different value and resubmit. Do not reuse bill numbers across customers or billing periods.
{% endtab %}

{% tab title="❌ Authentication Error" %}
**HTTP 401 — Signature validation failed.**

```json
{
  "code": "UNAUTHORIZED",
  "message": "Authentication failed"
}
```

**Resolution:** Verify all four request headers are present and correctly formed — `Client-Id`, `Request-Id`, `Request-Timestamp`, and `Signature`. `Request-Timestamp` must be in ISO 8601 UTC+0 and within acceptable clock skew. → Authentication
{% endtab %}
{% endtabs %}

{% hint style="warning" %}
**Important — token management:** In the DOKU Hosted Scheduler model, the merchant does **not** need to save or manage card tokens. DOKU stores all tokens in its own PCI-DSS compliant vault and links them to the billing schedule automatically. The only value your system needs to store is the `billNumber`.
{% endhint %}
{% endstep %}

{% step %}

#### Share the Checkout Link with Your Customer

After receiving the `paymentLink` from the API response, share it with the customer through your platform — via email, in-app notification, SMS, WhatsApp, or any other channel.

The customer clicks the link and lands on the DOKU-hosted checkout page — a secure registration form where they enter their card details.

{% hint style="info" %}
The checkout page is fully hosted and secured by DOKU. Card data entered by the customer never passes through the merchant's platform or server.
{% endhint %}
{% endstep %}

{% step %}

#### Customer Registers Card and Pays Registration Fee

On the checkout page, the customer:

1. Enters their card details (card number, expiry, CVV, cardholder name)
2. Confirms and submits the form
3. Pays a **registration fee** — this is an initial charge required to validate that the card is active and accepts charges

**The registration fee is immediately voided.** No money is collected from the customer. The charge appears temporarily as a bank authorization and disappears within a few business days. Its sole purpose is card validation.

**What happens next depends on the configured `startDate`:**

<table><thead><tr><th width="156.90625">Scenario</th><th width="145.14453125">Condition</th><th>Behavior</th></tr></thead><tbody><tr><td><strong>Standard Setup</strong></td><td><code>startDate</code> is a future date</td><td>Registration fee paid and voided. Billing schedule is created but idle. First real charge runs on <code>startDate</code>.</td></tr><tr><td><strong>Immediate Setup</strong></td><td><code>startDate</code> is the same day as registration</td><td>Registration fee paid and voided. System immediately triggers the first billing fee — <strong>2 charges occur on registration day</strong>: the voided registration fee + the first actual billing charge.</td></tr></tbody></table>

{% hint style="warning" %}
**Same-day billing:** If `startDate` is set to the registration date, the customer's card will be charged twice on that day — the registration fee (voided) and the first billing fee (real charge). Ensure this is the intended behavior before setting `startDate` to today.
{% endhint %}
{% endstep %}

{% step %}

#### DOKU Tokenizes and Confirms Registration

Once the card is validated:

* DOKU tokenizes the card and stores the credentials securely
* The billing schedule is created based on `executeType`, `executeDate`, and `executeMonth`
* A **Registration Callback** is sent to the merchant's **New Recurring Alert URL** with the registration result and masked card number
* The customer sees a success or error page on the checkout

**Registration Callback payload (sent to your New Recurring Alert URL):**

```json
{
  "customer": {
    "id": "CUST029",
    "name": "Yuni",
    "email": "customer@email.com"
  },
  "billing": {
    "bill_number": "BILL2025072415",
    "bill_detail": "Monthly Gym Membership",
    "bill_type": "S",
    "start_date": "2025-10-28T07:23:00Z",
    "end_date": "2026-10-28T07:23:00Z",
    "execute_type": "DATE",
    "execute_date": "5;6;7",
    "execute_month": "JAN;FEB;MAR;APR;MAY;JUN;JUL;AUG;SEP;OCT;NOV;DEC",
    "flat_status": true,
    "amount": 12000
  },
  "customerDetail": {
    "card_number": "552002******4209"
  },
  "order": {
    "invoice_number": "INV20250724081",
    "currency": "IDR",
    "amount": 12000
  }
}
```

<table><thead><tr><th width="248.19921875">Field</th><th>Description</th></tr></thead><tbody><tr><td><code>billing.bill_number</code></td><td>The <code>billNumber</code> from your registration request — store this as your reference for this customer's recurring billing record.</td></tr><tr><td><code>customerDetail.card_number</code></td><td>Masked card number for display and reconciliation purposes only.</td></tr><tr><td><code>billing.bill_type</code></td><td><code>S</code> = standard <code>PAYMENT</code>, <code>B</code> = <code>BILLING_PAYMENT</code> (DOKU Switching).</td></tr></tbody></table>
{% endstep %}

{% step %}

#### Recurring Charges Execute Automatically

From the first billing date onwards, DOKU automatically charges the customer's card on the configured schedule — no further action required from the merchant or the customer.

For each charge attempt, DOKU sends a **Payment Execution Notification** to your configured **URL Notification** endpoint.

→ [Payment Execution Notification](https://developers.doku.com/get-started-with-doku-api/notification)
{% endstep %}
{% endstepper %}
{% endtab %}

{% tab title="Merchant Initiate (MI)" %}
The Merchant Initiate flow is used when the merchant already holds customer card data — typically for **migrating existing customers** from another system into DOKU Hosted Scheduler. Merchants submit a batch registration file containing customer card data via **SFTP** or the **DOKU Dashboard**.

{% hint style="warning" %}
This flow can be used for data migration — it does not use the DOKU-hosted checkout page and does not involve customer interaction. The merchant is responsible for having obtained proper card data authorization from the customer prior to submission.
{% endhint %}

#### SFTP Registration Flow

1. **Prepare data file** — Generate a `.txt` file containing all customer card data and billing configurations for the batch.
2. **Encrypt and upload** — Encrypt the `.txt` file using AES-256 symmetric key and upload it to the designated `/download` folder on the DOKU SFTP server.
3. **Trigger processing** *(Optional)* — Call the **Trigger Batch API** to initiate processing immediately. DOKU also runs an automated internal scheduler that polls for and processes files at pre-defined intervals.
4. **DOKU processes the file** — DOKU retrieves, decrypts, and processes the registration data. Card tokens and billing schedules are created for each record.
5. **Report generated** — DOKU places a `.txt` result report in the `/upload` folder on the SFTP server and sends a notification to the merchant.
6. **Retrieve report** — Merchant retrieves the report from SFTP to update internal records with registration outcomes.

→ SFTP Setup and Configuration

#### TXT File Format

**Column definitions:**

<table><thead><tr><th width="133.828125">Column</th><th width="133.0625">Type</th><th width="99.37109375">Required</th><th width="93.42578125">Length</th><th>Description</th></tr></thead><tbody><tr><td><code>CUSTOMER ID</code></td><td>Alphanumeric</td><td>✅</td><td>64</td><td>Customer unique ID in the merchant's system</td></tr><tr><td><code>BILLING REF / BILLING NUMBER</code></td><td>Alphanumeric</td><td>✅</td><td>128</td><td>Merchant's unique ID for this billing service</td></tr><tr><td><code>DESCRIPTION</code></td><td>Alphanumeric</td><td>Optional</td><td>256</td><td>Billing description</td></tr><tr><td><code>CURRENCY</code></td><td>Alpha</td><td>✅</td><td>3</td><td><code>IDR</code></td></tr><tr><td><code>AMOUNT</code></td><td>Number</td><td>✅</td><td>12,2</td><td>Billing amount. No decimal: <code>10000</code>. With decimal: <code>10000.00</code></td></tr><tr><td><code>CARD NUMBER</code></td><td>Number</td><td>✅</td><td>16</td><td>Customer's credit card number</td></tr><tr><td><code>CARD EXP DATE</code></td><td>Number</td><td>✅</td><td>4</td><td>Card expiry in <code>MMYY</code> format</td></tr><tr><td><code>CARD HOLDER NAME</code></td><td>Alphanumeric</td><td>Optional</td><td>128</td><td>Cardholder name as printed on card</td></tr><tr><td><code>CARD HOLDER EMAIL</code></td><td>ANS</td><td>Optional</td><td>128</td><td>Customer email</td></tr><tr><td><code>CARD HOLDER PHONE</code></td><td>Number</td><td>Optional</td><td>32</td><td>Customer phone number</td></tr><tr><td><code>CARD HOLDER CITY</code></td><td>Alphanumeric</td><td>Optional</td><td>128</td><td>Customer city</td></tr><tr><td><code>CARD HOLDER REGION</code></td><td>Alphanumeric</td><td>Optional</td><td>128</td><td>Customer region/province</td></tr><tr><td><code>CARD HOLDER COUNTRY</code></td><td>Alpha</td><td>Optional</td><td>2</td><td>ISO country code — e.g., <code>ID</code></td></tr><tr><td><code>CARD HOLDER ADDRESS</code></td><td>Alphanumeric</td><td>Optional</td><td>128</td><td>Customer street address</td></tr><tr><td><code>CARD HOLDER POSTAL CODE</code></td><td>Alphanumeric</td><td>Optional</td><td>16</td><td>Customer postal code</td></tr><tr><td><code>CARD HOLDER BIRTHDATE</code></td><td>Number</td><td>Optional</td><td>8</td><td>Customer birthdate in <code>yyyyMMdd</code> format</td></tr><tr><td><code>START DATE</code></td><td>Number</td><td>✅</td><td>8</td><td>Billing start date in <code>yyyyMMdd</code> format</td></tr><tr><td><code>END DATE</code></td><td>Number</td><td>✅</td><td>8</td><td>Billing end date in <code>yyyyMMdd</code> format</td></tr><tr><td><code>EXECUTE TYPE</code></td><td>Alpha</td><td>✅</td><td>8</td><td><code>DAY</code>, <code>DATE</code>, or <code>FULLDATE</code> — same logic as CI flow</td></tr><tr><td><code>EXECUTE DATE</code></td><td>Alphanumeric</td><td>✅</td><td>2048</td><td>Billing execution dates — format depends on <code>EXECUTE TYPE</code>, values separated by semicolons</td></tr><tr><td><code>EXECUTE MONTH</code></td><td>Alphanumeric</td><td>✅</td><td>256</td><td>Months for execution — required for <code>DATE</code> type, leave empty for <code>FULLDATE</code></td></tr><tr><td><code>FLAT STATUS</code></td><td>Alpha</td><td>✅</td><td>5</td><td><code>TRUE</code> — fixed amount. <code>FALSE</code> — dynamic amount fetched from URL Amount endpoint</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

***

## Use Cases

{% tabs %}
{% tab title="SaaS" %}

<table><thead><tr><th width="169.91796875"></th><th>Details</th></tr></thead><tbody><tr><td><strong>Description</strong></td><td>A SaaS platform charges customers a monthly fee automatically — customers should not need to log in and pay each month.</td></tr><tr><td><strong>Solution</strong></td><td>Integrate Register Bill API into the SaaS onboarding flow. When a new customer signs up, call the API, redirect them to the checkout link, and let DOKU handle all subsequent monthly charges.</td></tr><tr><td><strong>How It Works</strong></td><td>Customer signs up → Merchant calls Register Bill API → Customer clicks checkout link → Enters card + pays voided registration fee → DOKU tokenizes card → Monthly charge auto-executed on billing date → Merchant receives callback.</td></tr><tr><td><strong>Features Used</strong></td><td>CI Flow, Register Bill API, Credit Card Tokenization, Payment Execution Callback</td></tr></tbody></table>
{% endtab %}

{% tab title="Migration" %}

<table><thead><tr><th width="157.2734375"></th><th>Details</th></tr></thead><tbody><tr><td><strong>Description</strong></td><td>A business migrating thousands of existing customers from a legacy recurring billing system to DOKU, without requiring each customer to re-register their card.</td></tr><tr><td><strong>Solution</strong></td><td>Use Merchant Initiate (MI) flow — prepare a batch <code>.txt</code> file with existing customer card data and upload via SFTP. DOKU processes the file and creates billing schedules for all customers in one operation.</td></tr><tr><td><strong>How It Works</strong></td><td>Prepare batch file → Encrypt and upload to SFTP → Trigger Batch API (optional) → DOKU processes registrations → Report placed on SFTP → Merchant retrieves and reconciles.</td></tr><tr><td><strong>Features Used</strong></td><td>MI Flow, SFTP Batch Registration, AES-256 Encryption</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

***

## Merchant & Customer Experience

#### Merchant View

* Call the **Register Bill API** to configure billing rules and receive a checkout link
* Share the checkout link with the customer via any channel (email, in-app, WhatsApp, SMS)
* Store the `billNumber` returned in the Registration Callback — this is the primary reference for the customer's recurring billing record
* Monitor all registered customers and charge statuses under **Account Billing → Manage Recurring**
* Download transaction reports from **Account Billing → Register Report**
* Configure billing execution behavior in **Settings → Account Billing → Bill Detail Setting**

#### Customer View

* Receives a checkout link from the merchant
* Clicks the link and enters card details on the DOKU-hosted checkout page
* Pays a registration fee (immediately voided — no money collected)
* Sees a success or error page; receives confirmation notification
* Is charged automatically on each billing date — no further action required

***

## Terms & Conditions

* Credit Card channel with **SALE + RECURRING** or **SALE + MOTO** must be enabled on your account before using DOKU Hosted Scheduler — Activate Account Billing
* Merchants must store the `billNumber` as the primary reference for each customer's recurring billing record — card tokens are managed entirely by DOKU
* Maximum `executeDate` value is **28** when using `DATE` type — day 29, 30, and 31 are not supported
* MI flow (SFTP batch registration) requires SFTP connectivity to be configured — Connectivity & File Security

***

## FAQ

<details>

<summary>What is the registration fee and why is it charged?</summary>

The registration fee is a small charge executed when the customer submits their card details on the checkout page. Nominal IDR 10,000 or MYR 2. It is immediately voided — no money is actually collected. Its sole purpose is to validate that the card is active and can accept charges, ensuring the recurring billing schedule is created against a working card.

</details>

<details>

<summary>What does the customer see when the registration fee is voided?</summary>

The customer may see a temporary authorization on their bank statement or mobile banking app. This disappears within a few business days — it is not a real deduction. After successful registration, the customer receives a confirmation notification and sees a success page on the checkout.

</details>

<details>

<summary>What happens if the customer's card is declined during registration?</summary>

If the card validation fails, the customer sees an error page on the checkout. No token is created and no billing schedule is registered. The customer must retry with a valid card by opening the checkout link again — if `disableRetryPayment` is set to `false` in the request.

</details>

<details>

<summary>Do I need to save the card token returned after registration?</summary>

No. In the DOKU Hosted Scheduler model, DOKU stores all card tokens internally. You only need to save the `billNumber` from the Registration Callback — this is your reference for the customer's recurring billing record. Never attempt to store raw card numbers or tokens on your own server.

</details>

<details>

<summary>What is the difference between executeType DAY, DATE, and FULLDATE?</summary>

`DAY` schedules charges on specific days of the week (e.g., every Monday and Thursday). `DATE` schedules charges on specific dates of the month (e.g., the 5th of every month) for specified months — this is the standard calendar-based billing mode. `FULLDATE` schedules charges on exact calendar dates (e.g., only on 5 October 2025 and 5 November 2025). Use `DATE` for standard recurring monthly billing.

</details>

<details>

<summary>Can I configure retry dates if the charge fails on the primary billing date?</summary>

Yes. When using `executeType: DATE`, pass multiple consecutive dates in `executeDate` separated by semicolons — e.g., `"5;6;7"`. If the charge fails on the 5th, the system automatically retries on the 6th, then the 7th. Enable **Send One Bill/Month** in Bill Execution Preferences to prevent double-charging if a retry succeeds.

</details>

<details>

<summary>What happens when a recurring charge fails?</summary>

DOKU sends a failure notification to your configured **URL Notification** endpoint. The charge is logged with a failed status in the Manage Recurring dashboard. If retry dates are configured, the system automatically attempts on the next date.

</details>


# Merchant Hosted Scheduler

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only
{% endhint %}

**Merchant Hosted Scheduler** gives merchants full control over billing execution. The merchant manages customer payment tokens internally and triggers charges on demand by uploading a batch billing file to DOKU via SFTP. DOKU executes the charges and returns a consolidated result report.

Unlike DOKU Hosted Scheduler where DOKU manages the full schedule automatically, in this model **the merchant owns the schedule** — DOKU only executes the charge when the merchant submits a file.

***

## Features & Benefits

**🎛️ Full Scheduling Control**

Merchants define exactly when charges are executed. Billing is triggered by file upload — not managed automatically by DOKU.

**🗄️ Merchant-Managed Tokens**

Customer payment tokens are obtained and stored by the merchant from a prior first payment. Tokens are reusable across billing cycles as long as the underlying payment method remains valid.

**📁 Bulk Billing via SFTP**

Process large volumes of charges simultaneously by uploading a structured `.TXT` billing file to the DOKU SFTP server. Each file is processed as a batch — one file can cover thousands of customers in a single operation.

**📊 Consolidated Reporting**

After each batch is processed, DOKU generates a result report with per-record outcomes — success, failure, and failure reason — placed in the SFTP outbound directory for merchant download and reconciliation.

***

## Prerequisites

Before using Merchant Hosted Scheduler, the following must be in place:

* [ ] Account Billing activated with a compatible payment channel — [Activate Account Billing](/subscription-and-billing/flexibill/account-billing/account-billing-activation)
* [ ] SFTP access configured and IP whitelisted — [Connectivity & File Security](/subscription-and-billing/flexibill/account-billing/connectivity-and-file-security-sftp)
* [ ] Customer tokens obtained via First Payment — see [Step 1](#step-1--first-payment--obtain-customer-token) below

***

## How It Works

```
Customer                Merchant System              DOKU
    │                         │                        │
    │── First Payment ────────▶│                        │
    │   (card/direct debit)   │                        │
    │                         │── Get Token List API ──▶│
    │                         │◀─ Token returned ───────│
    │                         │                        │
    │   [On billing date]     │                        │
    │                         │── Prepare .TXT file    │
    │                         │── Encrypt file         │
    │                         │── Upload to SFTP ──────▶│ /download folder
    │                         │── Trigger API ─────────▶│ (optional)
    │                         │                        │
    │                         │                        │── Process batch
    │                         │                        │── Execute charges
    │                         │                        │── Generate report
    │                         │                        │
    │                         │◀─ DOKU notification ───│ (report ready)
    │                         │◀─ Report file ──────────│ /upload folder
    │                         │                        │
    │◀─ Payment notification ─│                        │
```

***

## Step-by-Step Guide

{% stepper %}
{% step %}

### First Payment: Obtain Customer Token

Before a customer can be included in any batch billing file, a **token** must be obtained for their payment method. A token is a secure reference to the customer's payment credential — it never exposes the raw card or bank account number.

**How to get a token:**

1. The customer completes a **First Payment** through one of the supported payment methods:
   * Credit Card / Debit Card → [Direct API - Cards](https://developers.doku.com/accept-payments/direct-api/non-snap/cards)
   * Direct Debit (BRI, MANDIRI) → [Direct API - Direct Debit](https://developers.doku.com/accept-payments/direct-api/snap/integration-guide/direct-debit/bri-direct-debit)
2. After the First Payment completes, call the **Get Token List API** to retrieve the token bound to that customer: → [Get Token List API](https://developers.doku.com/archive/non-snap/tokenization-v1)
3. Store the token in your system alongside the customer record. The token is bound to both the payment credential and the `customer_id` used during the First Payment.

**Token lifecycle:**

| Scenario                                | Token Status                          | Action Required                                                |
| --------------------------------------- | ------------------------------------- | -------------------------------------------------------------- |
| Payment method is active                | ✅ Valid — reuse across billing cycles | No action                                                      |
| Card expired                            | ❌ Invalid — token no longer usable    | Initiate new First Payment with customer to obtain a new token |
| Card cancelled or blocked               | ❌ Invalid                             | Initiate new First Payment with customer                       |
| Charge failed due to insufficient funds | ✅ Still valid                         | Retry with the same token in the next billing cycle            |

{% hint style="info" %}
Tokens are **reusable**. You do not need a new token for each billing cycle — the same token works for every charge against the same payment method until that method becomes invalid.
{% endhint %}

{% hint style="warning" %}
When a card expires and the merchant obtains a new token from the customer's replacement card, use the **new token** in all subsequent batch files. Do not continue submitting the expired token — it will generate a record-level failure every cycle.
{% endhint %}
{% endstep %}

{% step %}

### Prepare the Batch Billing File

Create the billing file in `.TXT` format. Each line in the file represents one charge record.

**File Naming Convention**

The filename **must** include the prefix `TKN_`. Files without this prefix will not be recognized and processed by DOKU.

```
✅ TKN_202510ABC.TXT
✅ TKN_20251005_BATCH01.TXT
❌ BATCH_202510.TXT        (missing TKN_ prefix)
❌ TKN_202510ABC.csv       (wrong extension)
```

{% hint style="warning" %}
File names are used as idempotency keys in the Trigger API. Do not reuse the same filename across different billing cycles — each batch file must have a unique name.
{% endhint %}

**Column Definition**

<table><thead><tr><th width="167.15625">Column</th><th width="133.796875">Type</th><th width="108.06640625">Required</th><th width="94.890625">Length</th><th>Description</th></tr></thead><tbody><tr><td><code>BILLING REF / BILLING NUMBER</code></td><td>Alphanumeric</td><td>✅</td><td>128</td><td>Merchant's unique ID for this billing service record</td></tr><tr><td><code>DESCRIPTION</code></td><td>Alphanumeric</td><td>Optional</td><td>256</td><td>Billing description</td></tr><tr><td><code>INVOICE NUMBER</code></td><td>Alphanumeric</td><td>✅</td><td>64</td><td>Unique invoice number for this charge</td></tr><tr><td><code>CURRENCY</code></td><td>Alpha</td><td>✅</td><td>3</td><td><code>IDR</code> only</td></tr><tr><td><code>AMOUNT</code></td><td>Number</td><td>✅</td><td>10,2</td><td>Charge amount. No decimal: <code>10000</code>. With decimal: <code>10000.00</code></td></tr><tr><td><code>TOKEN</code></td><td>Number</td><td>✅</td><td>32</td><td>Customer payment token obtained from Get Token List API</td></tr><tr><td><code>CARD HOLDER NAME</code></td><td>Alphanumeric</td><td>Optional</td><td>128</td><td>Customer name</td></tr><tr><td><code>CARD HOLDER EMAIL</code></td><td>Alphanumeric</td><td>Optional</td><td>128</td><td>Customer email</td></tr><tr><td><code>CARD HOLDER PHONE</code></td><td>Number</td><td>Optional</td><td>32</td><td>Customer phone number</td></tr><tr><td><code>CARD HOLDER CITY</code></td><td>Alphanumeric</td><td>Optional</td><td>128</td><td>Customer city</td></tr><tr><td><code>CARD HOLDER REGION</code></td><td>Alphanumeric</td><td>Optional</td><td>128</td><td>Customer region/province</td></tr><tr><td><code>CARD HOLDER COUNTRY</code></td><td>Alpha</td><td>Optional</td><td>2</td><td>ISO country code — e.g., <code>ID</code></td></tr><tr><td><code>CARD HOLDER ADDRESS</code></td><td>Alphanumeric</td><td>Optional</td><td>128</td><td>Customer street address</td></tr><tr><td><code>CARD HOLDER POSTAL CODE</code></td><td>Alphanumeric</td><td>Optional</td><td>16</td><td>Customer postal code</td></tr><tr><td><code>CARD HOLDER BIRTHDATE</code></td><td>Number</td><td>Optional</td><td>8</td><td>Customer birthdate in <code>yyyyMMdd</code> format</td></tr><tr><td><code>EXECUTE DATE</code></td><td>Number</td><td>Optional</td><td>8</td><td>Specific date to execute this charge in <code>YYYYMMDD</code> format. If omitted, DOKU executes the record immediately when the file is processed. Must not be a past date.</td></tr></tbody></table>

{% hint style="warning" %}
`EXECUTE DATE` must not be a date in the past. If a past date is provided, the record will fail with an `INVALID EXECUTE DATE` error and the file will be placed in `/upload/failed` without any charges being executed. Set `EXECUTE DATE` to today or a future date, or omit it to execute immediately.
{% endhint %}
{% endstep %}

{% step %}

### Encrypt and Upload to SFTP

Before uploading, the file must be encrypted. After encryption, upload to the DOKU SFTP `/download` folder.

For full encryption procedure, folder structure, and SFTP connection details → [Connectivity & File Security (SFTP)](broken://pages/e9ccc3696e23f5f887d028467307ac8ed2b6fcdb)
{% endstep %}

{% step %}

### Trigger DOKU Processing *(Optional)*

After uploading the file, optionally call the **Trigger Batch API** to initiate processing immediately. Without this call, DOKU's internal scheduler will automatically pick up and process the file at its next polling interval.

**Endpoint:**

<table><thead><tr><th width="98.7734375"></th><th width="294">Sandbox</th><th>Production</th></tr></thead><tbody><tr><td><strong>Method</strong></td><td><code>POST</code></td><td><code>POST</code></td></tr><tr><td><strong>URL</strong></td><td><code>https://api-sandbox.doku.com/batch-upload/v1/notify</code></td><td><code>https://api.doku.com/batch-upload/v1/notify</code></td></tr></tbody></table>

**Request Headers:**

<table><thead><tr><th width="179.19140625">Header</th><th>Description</th></tr></thead><tbody><tr><td><code>Client-Id</code></td><td>Client ID from DOKU Back Office</td></tr><tr><td><code>Request-Id</code></td><td>Unique random string, max 128 characters</td></tr><tr><td><code>Request-Timestamp</code></td><td>ISO 8601 UTC+0 format. For WIB (UTC+7), subtract 7 hours — e.g., 08:51 WIB = <code>2020-09-22T01:51:00Z</code></td></tr><tr><td><code>Signature</code></td><td>HMAC-SHA256 signature generated on merchant backend</td></tr></tbody></table>

**Request Body:**

```json
{
  "file_name": "TKN_202510ABC.TXT"
}
```

<table><thead><tr><th width="119.578125">Parameter</th><th width="86.3671875">Type</th><th width="106.08984375">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>file_name</code></td><td>String</td><td>✅</td><td>Exact filename as uploaded to the SFTP <code>/download</code> folder, including the <code>TKN_</code> prefix and <code>.TXT</code> extension</td></tr></tbody></table>

**Response Scenarios:**

{% tabs %}
{% tab title="✅ In Process" %}
**HTTP 201 — File accepted for processing.**

```json
{
  "name": "TKN_202510ABC.TXT",
  "status": "IN_PROCESS"
}
```

DOKU has received the trigger and is processing the file. Monitor the SFTP `/upload` folder for the result report and wait for the DOKU notification callback.
{% endtab %}

{% tab title="❌ Invalid Signature" %}
**HTTP 400 — Signature validation failed.**

```json
{
  "error": {
    "code": "invalid_signature",
    "message": "invalid header signature",
    "type": "Invalid Signature"
  }
}
```

**Resolution:** Regenerate the `Signature` header using the correct HMAC-SHA256 algorithm and your `Client-Secret`. Verify `Request-Timestamp` is in ISO 8601 UTC+0 and within acceptable clock skew.
{% endtab %}

{% tab title="❌ Invalid Parameter" %}
**HTTP 400 — `file_name` is missing or empty.**

```json
{
  "error": {
    "code": "invalid_parameter",
    "message": "file_name must not be empty",
    "type": "Not input object file_name"
  }
}
```

**Resolution:** Include the `file_name` field in the request body with the exact filename of the uploaded file.
{% endtab %}

{% tab title="❌ Duplicate File Name" %}
**HTTP 400 — `file_name` has already been submitted.**

```json
{
  "error": {
    "code": "idempotent_request",
    "message": "idempotent request",
    "type": "Duplicate file name"
  }
}
```

**Resolution:** This filename has already been triggered for processing. Do not resubmit — the file is either already processing or has completed. Check the SFTP `/upload` folder for the result report. If you need to submit a new billing batch, use a different filename.
{% endtab %}
{% endtabs %}
{% endstep %}

{% step %}

### Receive DOKU Processing Notification

When DOKU finishes processing the batch file, it sends a notification to your configured merchant endpoint. This is the signal that the result report is ready to download.

**DOKU sends a `POST` request to your notification URL with:**

```json
{
  "service": {
    "id": "BATCH_UPLOAD"
  },
  "batch_file": {
    "name": "TKN_202510ABC.TXT",
    "status": "DONE",
    "date": "2025-10-05T13:52:53Z"
  }
}
```

| Field               | Description                                                                              |
| ------------------- | ---------------------------------------------------------------------------------------- |
| `service.id`        | Always `BATCH_UPLOAD` for batch processing notifications                                 |
| `batch_file.name`   | The filename that was processed                                                          |
| `batch_file.status` | `DONE` — processing is complete. The result report is ready in the SFTP `/upload` folder |
| `batch_file.date`   | Timestamp when processing completed, ISO 8601 UTC+0                                      |

{% hint style="info" %}
Configure your notification endpoint URL under **Settings → Account Billing → Bill Detail Setting → URL Notification**.
{% endhint %}
{% endstep %}

{% step %}

### Download and Reconcile the Report

After receiving the DOKU notification, download the result report from the SFTP `/upload` folder.

For the full report file structure, field definitions, and BANK CODE lookup table → [Connectivity & File Security — Report File](broken://pages/e9ccc3696e23f5f887d028467307ac8ed2b6fcdb#report-file-format)

**Reconciliation triage — how to handle FAILED records:**

<table><thead><tr><th width="207.4765625">Failure Type</th><th>Signal in Report</th><th>Action</th></tr></thead><tbody><tr><td><strong>Insufficient funds</strong></td><td><code>FAILED</code> + bank declined response code</td><td>Token is still valid — retry the customer in the next billing cycle file</td></tr><tr><td><strong>Expired or invalid token</strong></td><td><code>FAILED</code> + token-related response code</td><td>Token is no longer usable — initiate a new First Payment with the customer to obtain a new token, then use the new token in the next cycle</td></tr><tr><td><strong>Card blocked / stolen</strong></td><td><code>FAILED</code> + bank restriction response code</td><td>Contact customer for a new payment method — initiate new First Payment once resolved</td></tr><tr><td><strong>Invalid execute date</strong></td><td><code>FAILED</code> + <code>INVALID EXECUTE DATE</code></td><td>Correct the <code>EXECUTE DATE</code> in your next file — must not be a past date</td></tr><tr><td><strong>Already paid</strong></td><td><code>ALREADY_PAID</code></td><td>Send One Bill/Month is active and the customer was already charged this month — no action needed</td></tr><tr><td><strong>Decryption failure</strong></td><td>File in <code>/upload/failed</code>, no per-record report</td><td>Re-encrypt with the correct DOKU public key and re-upload with a new filename</td></tr></tbody></table>
{% endstep %}
{% endstepper %}

***

## Use Cases

{% tabs %}
{% tab title="Insurance" %}

<table><thead><tr><th width="151.12890625"></th><th>Details</th></tr></thead><tbody><tr><td><strong>Description</strong></td><td>An insurance company collects quarterly premium payments from thousands of policyholders on the same date. Their policy management system manages all customer data and tokens internally.</td></tr><tr><td><strong>Solution</strong></td><td>On each quarterly billing date, the policy system generates a <code>.TXT</code> batch file with all active policyholder tokens and uploads to DOKU SFTP. DOKU processes all charges in one operation.</td></tr><tr><td><strong>How It Works</strong></td><td>System generates billing file → encrypt → upload to SFTP <code>/download</code> → Trigger API (optional) → DOKU processes charges → report in <code>/upload</code> → merchant downloads and reconciles</td></tr><tr><td><strong>Features Used</strong></td><td>Merchant Hosted Scheduler, SFTP Batch Processing, Consolidated Report</td></tr></tbody></table>
{% endtab %}

{% tab title="Utility" %}

<table><thead><tr><th width="156.9296875"></th><th>Details</th></tr></thead><tbody><tr><td><strong>Description</strong></td><td>A utility company bills customers on the 5th of each month with amounts that vary based on metered usage.</td></tr><tr><td><strong>Solution</strong></td><td>Each month, the billing system calculates per-customer usage, builds a <code>.TXT</code> file with dynamic <code>AMOUNT</code> per customer and <code>EXECUTE DATE: 5th</code>, and uploads via SFTP.</td></tr><tr><td><strong>How It Works</strong></td><td>Billing system calculates usage → builds file with per-record amounts → encrypt → upload → DOKU charges each customer at their calculated amount → report returned</td></tr><tr><td><strong>Features Used</strong></td><td>Merchant Hosted Scheduler, Dynamic Amount per Record, EXECUTE DATE</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

***

## Merchant & Customer Experience

#### Merchant View

* Manage customer tokens internally — obtain via First Payment, store per customer record
* Prepare and upload batch `.TXT` billing file to SFTP `/download` folder on each billing cycle
* Optionally call Trigger API to initiate immediate processing
* Receive DOKU notification when report is ready
* Download result report from SFTP `/upload` folder
* Triage failed records: retry with same token (insufficient funds), or initiate new First Payment (expired/invalid token)

#### Customer View

* Completes a First Payment once during onboarding to authorize recurring charges
* Receives a payment success or failure notification after each charge attempt
* If card expires: goes through checkout again for a new card — merchant handles the rest

***

## Terms & Conditions

* Merchants are responsible for securely storing and managing customer tokens
* Batch files must use `TKN_` prefix in filename and `.TXT` extension — files not matching this convention will not be processed
* `EXECUTE DATE` must not be a past date — past dates generate per-record failures placed in `/upload/failed`
* SFTP access requires IP whitelisting — [Connectivity & File Security](broken://pages/e9ccc3696e23f5f887d028467307ac8ed2b6fcdb)
* Raw card numbers must never appear in batch files — use DOKU-issued tokens only

***

## FAQ

<details>

<summary>What is a token and how do I get one?</summary>

A token is a secure reference to a customer's payment credential — it represents their card or bank account without exposing the raw numbers. Tokens are obtained by having the customer complete a First Payment through the supported payment methods (Credit Card, Direct Debit BRI, or E-Wallet OVO). After the First Payment completes, call the Get Token List API to retrieve the token bound to that customer ID. Store the token in your system — it is reusable for all future billing cycles against the same payment method.

</details>

<details>

<summary>Can I reuse the same token across multiple billing cycles?</summary>

Yes. A token is persistent and remains valid as long as the underlying payment method is active. You do not need a new token each cycle — include the same token in every batch file until the card expires, is cancelled, or the customer's payment method changes.

</details>

<details>

<summary>What happens if a customer's card expires?</summary>

The token bound to the expired card becomes invalid. The charge will fail with a token-related error in the batch report. You must initiate a new First Payment with the customer so they can register their replacement card — then call Get Token List API to obtain the new token and use it in subsequent batch files. Do not continue submitting the expired token — it will fail every cycle until replaced.

</details>

<details>

<summary>Can I retry a failed charge with the same token after an insufficient funds failure?</summary>

Yes. An insufficient funds failure does not invalidate the token — the card itself is still active, it simply lacked balance at the time of the charge attempt. You can include the same token in your next billing cycle's batch file for a retry.

</details>

<details>

<summary>What happens if I omit EXECUTE DATE from a record?</summary>

The record is executed immediately when DOKU processes the batch file. If you need charges to run on a specific future date, set `EXECUTE DATE` to that date in `YYYYMMDD` format. If you omit it entirely, the charge runs as soon as the file is processed.

</details>

<details>

<summary>What happens if EXECUTE DATE is set to a past date?</summary>

The file is placed in the SFTP `/upload/failed` folder and DOKU sends a failure notification to your endpoint. No charges are executed for any record in the file. Correct the `EXECUTE DATE` to today or a future date, re-encrypt, and re-upload with a **new filename**.

</details>

<details>

<summary>What happens if some records in my batch file fail but others succeed?</summary>

Record-level failures (insufficient funds, invalid token, etc.) do not affect other records in the same file. Valid records are charged; failed records are flagged in the result report with their specific error reason. Review the report to triage each failure and take the appropriate action per record.

</details>

<details>

<summary>If I don't call the Trigger API, when will DOKU process my file?</summary>

DOKU has an internal scheduler that automatically polls the SFTP `/download` folder at pre-defined intervals. Your file will be processed even without the Trigger API call — the trigger only allows you to initiate processing immediately rather than waiting for the next polling interval. Contact your DOKU Account Manager for the specific polling interval applicable to your account.

</details>

<details>

<summary>What does the duplicate file name error on the Trigger API mean?</summary>

The Trigger API uses the `file_name` as an idempotency key — the same filename cannot be submitted twice. If you receive this error, the file has already been triggered for processing. Do not resubmit. Check the SFTP `/upload` folder for the result report. For a new billing batch, always use a unique filename.

</details>


# Connectivity & File Security (SFTP)

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only
{% endhint %}

This page covers all technical requirements for connecting to the DOKU SFTP server, encrypting batch billing files, and understanding the folder structure, file format, and report output for Merchant Hosted Scheduler batch operations.

***

## Features & Benefits

**🔐 Two-Layer File Encryption**

Batch files are protected with a two-layer encryption scheme — AES-256 for file content and RSA for key protection — ensuring that sensitive billing data is never exposed in transit or at rest on the SFTP server.

**📁 Dedicated Inbound and Outbound Directories**

DOKU provides separate folders on the SFTP server for uploading billing files and downloading result reports, with a clear naming convention that separates inbound from outbound operations.

**📊 Structured Result Reports**

After processing each batch, DOKU generates a `.TXT` report with a summary header and per-transaction detail rows — including response codes, approval codes, masked card numbers, and bank codes — for complete reconciliation.

**🔔 Processing Completion Notification**

DOKU notifies your merchant endpoint when the result report is ready, so your system does not need to poll the SFTP server.

***

## SFTP Connection

SFTP credentials are provisioned per merchant account and per environment (Sandbox / Production). Contact your **DOKU Account Manager** to obtain credentials.

<img src="/files/pahvafYRkikWzbdlerPN" alt="" height="325" width="624">

**Provide the following to DOKU when requesting access:**

* Your server's IP address(es) for whitelisting — SFTP access is restricted to pre-approved IPs only
* Your preferred authentication method: SSH key pair (recommended) or password

**Connection parameters provided by DOKU:**

<table><thead><tr><th width="170.6796875">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><strong>Host</strong></td><td>DOKU SFTP server hostname</td></tr><tr><td><strong>Port</strong></td><td>SFTP port</td></tr><tr><td><strong>Username</strong></td><td>Your merchant SFTP username</td></tr><tr><td><strong>Authentication</strong></td><td>SSH private key or password, as configured during setup</td></tr></tbody></table>

**Recommended SFTP clients:**

<table><thead><tr><th width="164.58203125">Type</th><th>Options</th></tr></thead><tbody><tr><td>Command-line</td><td><code>sftp</code>, <code>scp</code></td></tr><tr><td>GUI</td><td>FileZilla, WinSCP, Cyberduck</td></tr><tr><td>Programmatic</td><td><code>paramiko</code> (Python), <code>JSch</code> (Java), <code>ssh2</code> (Node.js), or any standard SFTP library</td></tr></tbody></table>

{% hint style="warning" %}
SFTP credentials are environment-specific. Sandbox and Production credentials are different — never use Production credentials in a test environment. Contact your DOKU Account Manager immediately if credentials are compromised.
{% endhint %}

***

## Folder Structure

After connecting to the DOKU SFTP server, you will find two folders:

<table><thead><tr><th width="112.0234375">Folder</th><th width="193.20703125">Direction</th><th>Purpose</th></tr></thead><tbody><tr><td><code>/download</code></td><td><strong>Merchant uploads here</strong></td><td>Upload your encrypted batch billing files to this folder for DOKU to pick up and process</td></tr><tr><td><code>/upload</code></td><td><strong>Merchant downloads from here</strong></td><td>DOKU places result reports here after processing. Also where failed files land in the <code>/upload/failed</code> subfolder</td></tr></tbody></table>

{% hint style="info" %}
**The folder names are from DOKU's perspective**, not the merchant's. DOKU *downloads* files from `/download` (i.e., picks up your uploads). DOKU *uploads* result reports to `/upload` (i.e., places them for you to retrieve). Think of it as: you write to `/download`, you read from `/upload`.
{% endhint %}

<img src="/files/h9hS6ikAAQIGK2sqa6Dz" alt="" height="424" width="328">

**Subfolder for failures:**

<table><thead><tr><th width="170.46484375">Folder</th><th>Contents</th></tr></thead><tbody><tr><td><code>/upload/failed</code></td><td>Files that could not be processed — decryption failures, invalid filenames, or files where <code>EXECUTE DATE</code> is in the past. DOKU also sends a notification to your endpoint when a file lands here.</td></tr></tbody></table>

***

## File Encryption

All batch billing files must be encrypted before upload. DOKU uses a **two-layer encryption scheme**:

* **Layer 1 (Content):** File data encrypted with AES-256 using a symmetric key
* **Layer 2 (Key Protection):** The symmetric key itself encrypted with DOKU's RSA public key

This ensures that even if the encrypted file is intercepted, the content cannot be decrypted without DOKU's RSA private key.

<img src="/files/P1Jo4DsjMGJhEyXqcoW0" alt="" height="511" width="624">

#### Encryption Process — Step by Step

{% stepper %}
{% step %}

#### Generate random Symmetric Key using a SALT (exactly 21 characters)

Generate the symmetric key using a SALT that is exactly 21 characters.
{% endstep %}

{% step %}

#### Encrypt the file content with AES-256 using the Symmetric Key

Encrypt the file content with AES-256 using the generated symmetric key.
{% endstep %}

{% step %}

#### Encrypt the Symmetric Key using DOKU's RSA Public Key (No Padding)

Encrypt the symmetric key using DOKU's RSA public key with no padding.
{% endstep %}

{% step %}

#### Prepend the length of the Symmetric Key as a 4-character string: "128 "

Prepend the length of the symmetric key as a 4-character string: `"128 "`.
{% endstep %}

{% step %}

#### Append the Encrypted Symmetric Key to the end of the Encrypted File

Append the encrypted symmetric key to the end of the encrypted file, then upload the resulting file to SFTP `/download`.
{% endstep %}
{% endstepper %}

**Key requirements:**

<table><thead><tr><th width="176.84765625">Parameter</th><th>Requirement</th></tr></thead><tbody><tr><td><strong>SALT</strong></td><td>Exactly <strong>21 characters</strong> — any alphanumeric combination. This is a hard requirement — a SALT of any other length will cause encryption failure</td></tr><tr><td><strong>AES mode</strong></td><td>AES-256</td></tr><tr><td><strong>RSA padding</strong></td><td>No Padding</td></tr><tr><td><strong>DOKU Public Key</strong></td><td>Provided by DOKU during setup. Must be renewed <strong>annually or bi-annually</strong> — contact your Account Manager before expiry</td></tr><tr><td><strong>Key length prefix</strong></td><td><code>128</code> (4 characters) prepended to the final file</td></tr></tbody></table>

{% hint style="warning" %}
If you upload a file encrypted with an **expired DOKU public key**, DOKU cannot decrypt it. The file will be placed in `/upload/failed` and a failure notification will be sent to your endpoint. Re-encrypt with the current public key and re-upload with a new filename.
{% endhint %}

#### DOKU Encryption Utility (Java)

DOKU provides a Java JAR utility (`tkn-utility.jar`) for encrypting and decrypting files. The same algorithm can also be implemented in any language that supports AES-256 and RSA — you are not required to use the Java utility.

**Encrypt:**

```bash
java -jar target/tkn-utility.jar encrypt \
  <input_file> \
  <output_file> \
  <public_key_file> \
  <salt_21_chars>
```

**Example:**

```bash
java -jar target/tkn-utility.jar encrypt \
  /data/TKN_202510ABC.TXT \
  /data/TKN_202510ABC.enc.TXT \
  /keys/PUBLICKEY_120078_20210115111404.key \
  012345678901234567890
```

**Decrypt (for verifying report files or testing):**

```bash
java -jar target/tkn-utility.jar decrypt \
  <input_file> \
  <output_file> \
  <private_key_file>
```

**Example:**

```bash
java -jar target/tkn-utility.jar decrypt \
  /data/TKN_202510ABC.enc.TXT \
  /data/TKN_202510ABC.dec.TXT \
  /keys/PRIVATEKEY_120078_20210115111404.key
```

{% hint style="info" %}
The encrypt/decrypt utility is provided for convenience. The underlying encryption is standard AES-256 + RSA — you can implement it in any language. Use the JAR utility to validate your implementation in testing before building a programmatic integration.
{% endhint %}

***

## Batch File Format

Batch files submitted to `/download` must follow this format:

**File requirements:**

<table><thead><tr><th width="163.6796875">Requirement</th><th>Specification</th></tr></thead><tbody><tr><td><strong>Format</strong></td><td>Plain text (<code>.TXT</code>)</td></tr><tr><td><strong>Filename prefix</strong></td><td>Must begin with <code>TKN_</code> — e.g., <code>TKN_202510ABC.TXT</code></td></tr><tr><td><strong>Encoding</strong></td><td>UTF-8</td></tr><tr><td><strong>Encryption</strong></td><td>AES-256 + RSA as described above — plaintext files will not be processed</td></tr></tbody></table>

For the full column definition of the batch file content → [Merchant Hosted Scheduler — Column Definition](broken://pages/3a269c6dc7a5509300ffebaf02354b7577172047#column-definition)

***

## Report File Format

After DOKU processes a batch file, a result report in `.TXT` format is placed in the SFTP `/upload` folder. The report has two sections: a **summary block** at the top and **per-transaction rows** below.

#### Summary Block

The first rows of the report contain batch-level totals:

<table><thead><tr><th width="183.3671875">Field</th><th width="129.80859375">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>TOTAL AMOUNT</code></td><td>Number(12)</td><td>Sum of all successfully charged amounts in this batch</td></tr><tr><td><code>TOTAL TRANSACTION</code></td><td>Number(11)</td><td>Total number of records in the batch</td></tr><tr><td><code>TOTAL SUCCESS</code></td><td>Number(11)</td><td>Number of records charged successfully</td></tr><tr><td><code>TOTAL FAILED</code></td><td>Number(11)</td><td>Number of records that failed</td></tr></tbody></table>

#### Per-Transaction Rows

Each subsequent row represents one record from the batch file:

| Field               | Type              | Description                                                                                               |
| ------------------- | ----------------- | --------------------------------------------------------------------------------------------------------- |
| `CARD NUMBER`       | NS(16)            | Masked card number — e.g., `411111******7548`                                                             |
| `INVOICE NUMBER`    | Alphanumeric(64)  | Invoice number as submitted in the batch file                                                             |
| `AMOUNT`            | Number(12,2)      | Amount charged for this record                                                                            |
| `CURRENCY`          | Alpha(3)          | Currency code — e.g., `IDR`                                                                               |
| `RESPONSE CODE`     | Alphanumeric(2)   | Result of the charge attempt. `00` = success. Other codes indicate failure — see below                    |
| `RESPONSE MESSAGE`  | Alphanumeric(256) | Human-readable result description — e.g., `SUCCESS`, `INSUFFICIENT FUNDS`, `INVALID TOKEN`                |
| `APPROVAL CODE`     | Alphanumeric(16)  | Bank approval code for successful charges. Empty for failed records                                       |
| `PAYMENT DATE TIME` | Number(14)        | Timestamp of the charge attempt in `yyyyMMddHHmmss` format — e.g., `20251005121030` = 5 Oct 2025 12:10:30 |
| `BANK CODE`         | Number(3)         | Issuing bank identifier. See Bank Code lookup below                                                       |

#### Bank Code Lookup

<table><thead><tr><th width="145.19921875">Bank Code</th><th>Bank</th></tr></thead><tbody><tr><td><code>100</code></td><td>BNI</td></tr><tr><td><code>150</code></td><td>Bank CIMB</td></tr><tr><td><code>151</code></td><td>BRI</td></tr><tr><td><code>350</code></td><td>Bank Mandiri</td></tr><tr><td><code>400</code></td><td>BCA</td></tr></tbody></table>

#### PAYMENT DATE TIME Format

`yyyyMMddHHmmss` — parsed as follows:

```
20251005121030
│   │ │ │ │ └── Seconds: 30
│   │ │ │ └──── Minutes: 10
│   │ │ └────── Hours:   12
│   │ └──────── Date:    05
│   └────────── Month:   10
└────────────── Year:    2025
= 5 October 2025 at 12:10:30 WIB
```

#### RESPONSE CODE `00`

`RESPONSE CODE: 00` means the charge was processed successfully. Any other code indicates a failure. The full list of response codes and their meanings is available from your DOKU Account Manager.

👉 [Learn more](https://developers.doku.com/get-started-with-doku-api/response-code/http-status-and-case-code#id-2.-credit-card) of Bank and DOKU response code

***

## Failure Scenarios

#### Window 1 — Before Payment Execution (File-Level Failures)

These failures occur before any charge is attempted. The entire file fails — no records are processed.

<table><thead><tr><th width="123.68359375">Scenario</th><th width="216.80078125">Cause</th><th>Signal</th><th>Resolution</th></tr></thead><tbody><tr><td><strong>Decryption failure</strong></td><td>Wrong or expired DOKU public key used for encryption; incorrect SALT length; encrypted symmetric key not appended correctly</td><td>File placed in <code>/upload/failed</code>; DOKU sends failure notification to merchant endpoint</td><td>Re-encrypt using the correct current DOKU public key with a 21-character SALT; re-upload with a <strong>new filename</strong></td></tr><tr><td><strong>Invalid filename</strong></td><td>Missing <code>TKN_</code> prefix or wrong file extension</td><td>File not recognized; no processing occurs</td><td>Rename file with <code>TKN_</code> prefix and <code>.TXT</code> extension; re-upload</td></tr><tr><td><strong>Past EXECUTE DATE</strong></td><td>All records in the file have an <code>EXECUTE DATE</code> that has already passed</td><td>File placed in <code>/upload/failed</code> with <code>INVALID EXECUTE DATE</code>; DOKU sends failure notification</td><td>Correct <code>EXECUTE DATE</code> to today or a future date; re-encrypt and re-upload with a <strong>new filename</strong></td></tr></tbody></table>

{% hint style="warning" %}
When re-uploading after a file-level failure, always use a **new filename**. The failed filename cannot be reused — submitting the same filename to the Trigger API will return a duplicate error.
{% endhint %}

#### Window 2 — After Payment Execution (Record-Level Failures)

These failures occur during charge execution. Valid records are charged; failed records are flagged in the result report. Other records in the same file are not affected.

<table><thead><tr><th width="141.31640625">Scenario</th><th width="163.8828125">Signal in Report</th><th width="161.91796875">Token Still Valid?</th><th>Resolution</th></tr></thead><tbody><tr><td><strong>Insufficient funds</strong></td><td><code>FAILED</code> + bank decline code</td><td>✅ Yes</td><td>Retry the customer in the next billing cycle with the same token</td></tr><tr><td><strong>Expired card / invalid token</strong></td><td><code>FAILED</code> + token-related response code</td><td>❌ No</td><td>Initiate new First Payment with customer to obtain a new token; use new token in next cycle</td></tr><tr><td><strong>Card blocked or stolen</strong></td><td><code>FAILED</code> + restriction response code</td><td>❌ No</td><td>Contact customer for a new payment method; initiate new First Payment once resolved</td></tr><tr><td><strong>Already paid this month</strong></td><td><code>ALREADY_PAID</code></td><td>✅ Yes</td><td>Send One Bill/Month is active and customer was already charged this month — no action needed</td></tr></tbody></table>

***

## Terms & Conditions

* SFTP access requires **IP whitelisting** — provide all server IPs to DOKU during setup. If your IP changes, re-whitelist before the change takes effect
* Batch files must be encrypted using the current DOKU RSA public key — DOKU public keys must be renewed **annually or bi-annually**
* **SALT must be exactly 21 characters** — any other length will cause encryption failure
* Batch files must use the `TKN_` filename prefix and `.TXT` extension
* Raw card numbers, CVVs, and full PAN data must never appear in batch files — use DOKU-issued tokens only
* Outbound report files in `/upload` do not need to be encrypted — they are provided as plaintext `.TXT`

***

## FAQ

<details>

<summary>What is the SALT and what are the requirements?</summary>

The SALT is a random string used during the AES-256 symmetric key generation step of the encryption process. It must be **exactly 21 characters** — alphanumeric, any combination. Using a SALT of any other length will cause encryption failure and the file will land in `/upload/failed`. The SALT does not need to be stored permanently — it is consumed during encryption and is not needed for decryption.

</details>

<details>

<summary>Where do I get DOKU's RSA public key and when does it expire?</summary>

DOKU provides the RSA public key during the Account Billing SFTP setup process. The key must be renewed **annually or bi-annually** — your DOKU Account Manager will notify you ahead of expiry. If you upload a file encrypted with an expired key, DOKU cannot decrypt it and the file will be placed in `/upload/failed`. Do not wait for expiry to request a renewal — rotate proactively as part of your annual security review.

</details>

<details>

<summary>Can I implement the encryption in a language other than Java?</summary>

Yes. The encryption algorithm is standard AES-256 + RSA No Padding — any language with support for these algorithms can implement it. The DOKU Java utility (`tkn-utility.jar`) is provided for convenience and testing, not as a requirement. Validate your implementation in Sandbox against the Java utility before deploying to Production.

</details>

<details>

<summary>Why is the upload folder called /download and vice versa?</summary>

The folder names are from DOKU's perspective. DOKU *downloads* (reads) files from `/download` — so that is where you upload your billing files. DOKU *uploads* (writes) result reports to `/upload` — so that is where you download your reports. As a merchant: write to `/download`, read from `/upload`.

</details>

<details>

<summary>What should I do if my server IP changes?</summary>

Contact your DOKU Account Manager to whitelist the new IP **before** the change takes effect. SFTP connections from non-whitelisted IPs are refused. If you have a dynamic IP, request that DOKU whitelist a static IP range or use a fixed NAT gateway for outbound SFTP connections.

</details>

<details>

<summary>What does RESPONSE CODE 00 mean in the result report?</summary>

`RESPONSE CODE: 00` indicates a successful charge. Any other code indicates a failure. The `RESPONSE MESSAGE` column provides a human-readable description of the failure reason. Contact your DOKU Account Manager for the full response code reference applicable to your payment channels.

</details>

<details>

<summary>How do I parse PAYMENT DATE TIME in the report?</summary>

`PAYMENT DATE TIME` uses the format `yyyyMMddHHmmss` — a 14-digit string with no separators. For example, `20251005121030` = 5 October 2025 at 12:10:30 WIB. Parse by position: characters 1–4 = year, 5–6 = month, 7–8 = day, 9–10 = hour, 11–12 = minute, 13–14 = second.

</details>

<details>

<summary>Do I need to decrypt the result report files before reading them?</summary>

No. Result reports placed by DOKU in the `/upload` folder are plaintext `.TXT` files — they do not require decryption. Only inbound billing files that you upload to `/download` need to be encrypted.

</details>


# Manage Recurring

{% hint style="info" %}
This page covers the **Account Billing** dashboard — available under **FlexiBill → Account Billing** in the DOKU Dashboard. These features apply to the **DOKU Hosted Scheduler** model only.
{% endhint %}

The Account Billing dashboard is the operational hub for managing all registered recurring bills and viewing the registration log. It consists of two tabs: **Manage Recurring** for active bill management and **Register Report** for the registration history.

Navigate to: **DOKU Dashboard → FlexiBill → Account Billing**

***

## Manage Recurring

The Manage Recurring tab displays all recurring bills registered under the merchant account. Each record represents one billing configuration registered for a customer — created when the customer completed their First Payment and card tokenization via the DOKU Hosted Scheduler flow.

<figure><img src="/files/U3vSqbXUOAxEuNWrL6aN" alt=""><figcaption></figcaption></figure>

### Data Model

A single customer can have **multiple Billing Numbers**. Each Billing Number is an independent bill with its own amount, schedule configuration, and payment source. Customer-level actions affect the customer and all their bills simultaneously; bill-level actions affect only that one specific bill.

```
Customer (Arief — arief@email.com)
├── Bill SUB26000063 → Card ****9195 → IDR 3,330 — Active
├── Bill SUB26000064 → Card ****4805 → IDR 5,000 — Active
└── Bill SUB26000065 → Card ****9195 → IDR 8,750 — Inactive
```

The customer panel on the right side of each card reflects this:

<table><thead><tr><th width="219.1796875">Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>Total Bill</strong></td><td>Total number of Billing Numbers registered under this customer</td></tr><tr><td><strong>Total Source of Funds</strong></td><td>Total number of distinct payment methods (tokens) registered across all this customer's bills</td></tr></tbody></table>

***

### Search and Filter

<table><thead><tr><th width="172.984375">Control</th><th>Description</th></tr></thead><tbody><tr><td><strong>Search by</strong></td><td>Select the search field type from the dropdown — default is Billing Number</td></tr><tr><td><strong>Search input</strong></td><td>Enter the search value and click <strong>Search</strong></td></tr><tr><td><strong>Select bill status</strong></td><td>Filter the list by billing status — Active or Inactive</td></tr><tr><td><strong>Filter</strong></td><td>Apply additional filters to narrow the result set</td></tr><tr><td><strong>Reset All</strong></td><td>Clear all active filters and return to the full list</td></tr></tbody></table>

Active filter tags are shown below the search bar as removable chips. The result count is displayed below the filter row.

***

#### Record Card

Each billing record is displayed as a card containing:

<table><thead><tr><th width="182.40234375">Element</th><th>Description</th></tr></thead><tbody><tr><td><strong>Billing Number</strong></td><td>Unique identifier for this bill — e.g., <code>SUB26000063</code></td></tr><tr><td><strong>Status badge</strong></td><td>Current billing status: <strong>Active</strong> (green) or <strong>Inactive</strong> (orange)</td></tr><tr><td><strong>Date range</strong></td><td>Billing schedule period — start date until end date</td></tr><tr><td><strong>Description</strong></td><td>Service or product name associated with this bill</td></tr><tr><td><strong>Amount</strong></td><td>Billing amount per cycle</td></tr><tr><td><strong>Masked card number</strong></td><td>The payment method registered for this bill — e.g., <code>548117******9195</code></td></tr><tr><td><strong>Customer panel</strong></td><td>Customer name, email, Total Bill count, Total Source of Funds count</td></tr></tbody></table>

***

### Billing Status

<table><thead><tr><th width="125.59765625">Status</th><th>Description</th></tr></thead><tbody><tr><td><strong>Active</strong></td><td>The bill is active — charges will be executed on the configured schedule</td></tr><tr><td><strong>Inactive</strong></td><td>The bill or customer has been inactivated — no charges will be executed</td></tr></tbody></table>

***

### Actions

A single record card has three action surfaces, each operating at a different scope. Understanding the scope before taking action is important — customer-level actions affect all bills, not just the one displayed.

**Actions Scope Overview**

<table><thead><tr><th width="141.375">Action</th><th width="123.30859375">Surface</th><th width="170.61328125">Scope</th><th>Effect</th></tr></thead><tbody><tr><td>Update Profile</td><td>Customer ⋮</td><td>Customer</td><td>Updates customer identity data across all bills</td></tr><tr><td>Inactivate Customer</td><td>Customer ⋮</td><td>Customer — all bills</td><td><strong>Blocks</strong> all bills and all manual actions including Confirm Payment</td></tr><tr><td>Delete Customer</td><td>Customer ⋮</td><td>Customer — all bills</td><td>Permanently removes customer and all their bills</td></tr><tr><td>Inactivate / Activate Bill</td><td>Bill ⋮</td><td>This bill only</td><td>Pauses or resumes this bill only — other bills unaffected</td></tr><tr><td>Edit Execute Schedule</td><td>Bill ⋮</td><td>This bill only</td><td>Updates schedule from next cycle</td></tr><tr><td>Delete Bill</td><td>Bill ⋮</td><td>This bill only</td><td>Permanently removes this bill only</td></tr><tr><td>Update Source of Fund</td><td>Card ⋮</td><td>This bill only</td><td>Generates checkout link for customer to register new card</td></tr><tr><td>Confirm Payment</td><td>Button</td><td>This bill — current cycle</td><td>Triggers immediate manual charge execution</td></tr></tbody></table>

{% hint style="warning" %}
**Inactivate Customer** blocks all bills and all actions for that customer — including Confirm Payment. Use this only when you want to halt all activity for a customer entirely. To pause a single product or billing line, use **Inactivate Bill** from the bill ⋮ instead.
{% endhint %}

***

**👤 Customer Actions (⋮ above customer profile)**

The three-dot menu on the **right side of the card above the customer profile panel** manages the customer as a whole:

<table><thead><tr><th width="202.72265625">Action</th><th>Description</th></tr></thead><tbody><tr><td><strong>Update Profile</strong></td><td>Opens a form to update the customer's identity data: <strong>Name</strong>, <strong>Email</strong>, <strong>Phone Number</strong>. Changes apply across all bills registered under this customer</td></tr><tr><td><strong>Inactivate Customer</strong></td><td>Blocks the customer — all bills under this customer stop executing and all manual actions including Confirm Payment are blocked. The customer can be reactivated to resume normal operation</td></tr><tr><td><strong>Delete Customer</strong></td><td>Permanently removes the customer record and all their associated bills. This action cannot be undone</td></tr></tbody></table>

{% hint style="warning" %}
**Deleting a customer is permanent** — the customer profile, all their Billing Numbers, and all associated tokens are removed. If billing needs to resume for this customer in the future, a full re-registration via a new First Payment is required for each bill.
{% endhint %}

***

**💰 Bill Configuration Actions (⋮ next to billing amount)**

The three-dot menu **next to the billing amount** manages the configuration of this specific bill. Each option opens its own dedicated form:

<table><thead><tr><th width="208.9921875">Action</th><th width="213.52734375">Form Fields</th><th>Description</th></tr></thead><tbody><tr><td><strong>Inactivate / Activate</strong></td><td>—</td><td>Toggles this bill between Active and Inactive. Only this bill is affected — the customer's other bills continue as configured</td></tr><tr><td><strong>Edit Execute Schedule</strong></td><td>Execute Type, Execute Date, Execute Month</td><td>Updates the billing schedule. Takes effect from the <strong>next billing cycle</strong></td></tr><tr><td><strong>Delete Bill</strong></td><td>—</td><td>Permanently removes this specific bill. The customer record and their other bills are not affected</td></tr></tbody></table>

{% hint style="info" %}
Changes to billing amount and execute schedule take effect from the **next billing cycle**. The current cycle's charge — if already executed or in progress — is not affected.
{% endhint %}

***

**🔗 Payment Source Actions (⋮ next to masked card number)**

When the card itself is the problem, Change Card generates a secure, DOKU-hosted checkout link for that one bill. You never see or handle the customer's new card details — they click through and enter them directly on DOKU's page, and the new card is tokenized and takes over automatically from that point forward.

| Change Card / Update Source of Fund | Lets a customer self-register a new card for one bill via a secure hosted link — no raw card data ever touches your systems. | A customer's card expired; you send the link over WhatsApp, they update it in under a minute, and next month's charge goes through normally. |
| ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |

The three-dot menu **next to the masked card number** manages the payment method linked to this specific bill:

**Update Source of Fund** generates a secure DOKU-hosted checkout link for the customer to register a new card. The merchant does not handle any card data — the customer completes the re-registration themselves through the checkout page.

{% stepper %}
{% step %}

#### Click **⋮** next to the masked card number and select **Update Source of Fund**

This starts the payment source update flow for the selected bill.
{% endstep %}

{% step %}

#### Confirm to generate a checkout link

The system generates a checkout link.

<figure><img src="/files/edZQyAsoIxRGdcm6SSmd" alt=""><figcaption></figcaption></figure>

{% endstep %}

{% step %}

#### Choose the delivery method

<table><thead><tr><th width="155.21875">Delivery Option</th><th>How It Works</th></tr></thead><tbody><tr><td><strong>Send to email</strong></td><td>DOKU automatically sends the checkout link to the customer's registered email address</td></tr><tr><td><strong>Copy link</strong></td><td>The link is copied to clipboard — merchant delivers it manually via any channel (WhatsApp, SMS, in-app message, etc.)</td></tr></tbody></table>
{% endstep %}

{% step %}

#### Customer opens the link and enters new card details

The customer clicks the link, lands on the DOKU-hosted checkout page, and enters new card details.
{% endstep %}

{% step %}

#### The new card is tokenized and linked to the bill

The new card is tokenized and automatically linked to this bill — all future charges use the new payment method.
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
If the customer did not receive the link or the link has expired, repeat the Update Source of Fund action to generate a new checkout link.
{% endhint %}

***

**✅ Confirm Payment**

The **Confirm Payment** button triggers an **immediate manual charge execution** for the current billing cycle — it forces DOKU to attempt the charge against the registered token right now, outside the configured schedule.

**When to use Confirm Payment:**

| Scenario                                                                                              | Action                                                                             |
| ----------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| Scheduled charge failed (e.g., insufficient funds) and the customer has since topped up their account | Click Confirm Payment to retry immediately without waiting for the next retry date |
| Merchant wants to execute a charge on demand outside the configured billing schedule                  | Click Confirm Payment to trigger an immediate charge attempt                       |

{% hint style="warning" %}
**Confirm Payment is blocked when the customer is in Inactive/blocked state.** You must reactivate the customer first using **Inactivate / Activate** from the customer ⋮ before Confirm Payment becomes available.
{% endhint %}

***

### FAQ — Manage Recurring

<details>

<summary>Can one customer have multiple Billing Numbers?</summary>

Yes. A single customer can have multiple independent Billing Numbers — each representing a separate billing line with its own amount, schedule, and payment source. For example, a gym customer might have one bill for their monthly membership and another for a personal training add-on. The customer panel shows **Total Bill** to reflect how many Billing Numbers are registered under that customer.

</details>

<details>

<summary>What is the difference between Inactivate Customer and Inactivate Bill?</summary>

**Inactivate Customer** operates at the customer level — it blocks all bills under this customer simultaneously and prevents all actions including Confirm Payment. Use this only when you want to halt everything for a customer entirely.

**Inactivate Bill** operates at the bill level — it pauses only that specific bill. The customer's other bills continue executing normally, and Confirm Payment remains available on other bills.

If you want to temporarily pause a single product for a customer, use **Inactivate Bill**. If you want to block all activity for the customer, use **Inactivate Customer**.

</details>

<details>

<summary>What is the difference between Delete Customer and Delete Bill?</summary>

**Delete Customer** permanently removes the customer record and all their associated Billing Numbers and tokens. All billing activity stops completely with no recovery path.

**Delete Bill** permanently removes only that specific bill. The customer profile and all other bills registered under them remain intact and continue executing normally.

</details>

<details>

<summary>Can I reactivate a customer after inactivating them?</summary>

Yes. Select **Inactivate / Activate** from the customer ⋮ to reactivate a blocked customer. Once reactivated, all their Active bills resume executing on their configured schedules and Confirm Payment becomes available again.

</details>

<details>

<summary>What is Confirm Payment and when should I use it?</summary>

Confirm Payment is a manual retry trigger — it forces an immediate charge execution for the current billing cycle outside the configured schedule. Use it when a scheduled charge has failed and the customer has resolved the issue (e.g., topped up their account) and you want to retry immediately without waiting for the next retry date. Confirm Payment is blocked when the customer is in Inactive/blocked state.

</details>

<details>

<summary>How does the customer register a new card via Update Source of Fund?</summary>

After you initiate Update Source of Fund and complete the confirmation step, DOKU generates a checkout link. You deliver this to the customer either via their registered email (automatic) or by copying the link manually. The customer clicks the link, enters their new card details on the DOKU-hosted checkout page, and the new card is tokenized and automatically linked to the bill. No card data passes through your system.

</details>

<details>

<summary>What if the customer didn't receive the Update Source of Fund link?</summary>

Repeat the Update Source of Fund action on the same bill to generate a new checkout link. Deliver it via the copy link option if the email delivery did not reach the customer — paste it into WhatsApp, SMS, or any other channel.

</details>

***

## Register Report

The Register Report tab is a **registration log** — it records every bill that was registered for the first time under this merchant account, along with the registration date, schedule configuration, and current status.

{% hint style="info" %}
**Register Report is not a transaction report.** It shows when bills were *registered*, not the history of charges executed against them. For full transaction history and payment records, refer to the centralized **Reports** module in the DOKU Dashboard.
{% endhint %}

Navigate to: **DOKU Dashboard → FlexiBill → Account Billing → Register Report**

***

### Summary Bar

The top of the Register Report page displays three key figures:

<table><thead><tr><th width="169.03515625">Metric</th><th>Description</th></tr></thead><tbody><tr><td><strong>Total Registration</strong></td><td>Total number of bills ever registered under this merchant account</td></tr><tr><td><strong>Active</strong></td><td>Number of currently active registered bills</td></tr><tr><td><strong>Inactive</strong></td><td>Number of currently inactive registered bills</td></tr></tbody></table>

***

### Search and Filter

<table><thead><tr><th width="218.0625">Control</th><th>Description</th></tr></thead><tbody><tr><td><strong>Search by Customer ID</strong></td><td>Enter a Customer ID to filter records for a specific customer</td></tr><tr><td><strong>Search by card name</strong></td><td>Enter the cardholder name to filter by payment method owner</td></tr><tr><td><strong>Select customer status</strong></td><td>Filter by registration status — Active or Inactive</td></tr><tr><td><strong>Filter</strong></td><td>Apply additional filters</td></tr><tr><td><strong>Export</strong></td><td>Download the current filtered view as a file for offline reconciliation</td></tr><tr><td><strong>⚙ (settings icon)</strong></td><td>Configure which columns are visible in the table</td></tr></tbody></table>

***

### Column Definitions

<table><thead><tr><th width="160.63671875">Column</th><th>Description</th></tr></thead><tbody><tr><td><strong>Customer ID</strong></td><td>Unique customer identifier — matches the <code>customer_id</code> used during registration</td></tr><tr><td><strong>Billing Number</strong></td><td>Unique bill identifier — e.g., <code>SUB26000032</code></td></tr><tr><td><strong>Card Number</strong></td><td>Masked payment method — e.g., <code>548117******9195</code></td></tr><tr><td><strong>Card Name</strong></td><td>Cardholder name as registered</td></tr><tr><td><strong>Register Date</strong></td><td>The date the bill was first registered</td></tr><tr><td><strong>Start Date</strong></td><td>The billing schedule start date configured at registration</td></tr><tr><td><strong>End Date</strong></td><td>The billing schedule end date — <code>31/12/2999</code> indicates no end date (unlimited)</td></tr><tr><td><strong>Execute Type</strong></td><td>The billing execution type: <code>DAY</code>, <code>DATE</code>, or <code>FULLDATE</code> → <a href="/pages/7972fd90f56f70f7a17fcd67af7121672548c606#execute-type">Execute Type</a></td></tr><tr><td><strong>Execute Date</strong></td><td>The specific execution date(s) or day(s) configured — e.g., <code>20260508</code> for FULLDATE, or <code>5;6;7</code> for DATE</td></tr><tr><td><strong>Execute Month</strong></td><td>The months in which charges execute — e.g., <code>JAN,FEB,MAR,...,DEC</code>. Empty for FULLDATE type</td></tr><tr><td><strong>Amount</strong></td><td>The registered billing amount per cycle</td></tr><tr><td><strong>Status</strong></td><td>Current registration status: <strong>Active</strong> (green) or <strong>Inactive</strong> (orange)</td></tr></tbody></table>

***

#### Pagination

Use the **items per page** selector in the bottom left to control how many records are displayed per page (default: 10). Navigate between pages using the pagination controls in the bottom right — e.g., `Showing 1 - 8 from 8 entries`.

***

### FAQ — Register Report

<details>

<summary>What is the difference between Register Report and the transaction report in the Reports module?</summary>

Register Report is a registration log — it shows when each bill was registered and its schedule configuration. It does not show individual charge attempts, payment outcomes, or amounts collected per cycle. For full transaction history including payment success and failure per cycle, use the centralized **Reports** module in the DOKU Dashboard.

</details>

<details>

<summary>Why does End Date show 31/12/2999 for some records?</summary>

`31/12/2999` is the system's representation of an **unlimited end date** — the bill has no configured expiry and will continue until manually inactivated or deleted. This corresponds to `end_date.type: NEVER` in the Register Bill API.

</details>

<details>

<summary>Can I update a bill's configuration directly from Register Report?</summary>

No. Register Report is read-only — it is a historical log for reference and reconciliation. To update a bill's amount, schedule, customer profile, or payment source, use the **Manage Recurring** tab.

</details>

<details>

<summary>What does the Export button download?</summary>

Export downloads the current filtered view of the Register Report as a file. Apply any search filters before exporting if you want a specific subset of records — for example, all Active registrations for a specific Customer ID.

</details>


# Billing Portal

{% hint style="info" %}
Availability: 🇮🇩 Indonesian Business Account only
{% endhint %}

Billing Portal is a product that allows merchants to build and customize a community-facing application — including homepage sections, brand identity, and logos — without writing any code. The application is integrated with DOKU Subscription and Billing, enabling community members to view and pay their bills directly through the app.

## Features & Benefits

#### 🎨 No-Code Customization

Configure your application's homepage sections, color scheme, logo, and fonts entirely from the merchant dashboard — no developer required.

#### 🔗 Integrated with DOKU Subscription and Billing

The Billing Portal is natively connected to FlexiBill. Members can look up their invoices by Flexibill Member or Customer ID and pay outstanding bills directly within the app.

#### 📱 Multiple Payment Methods

Members can pay using **DOKU Wallet** or **Other Payment Methods** (Virtual Account, QRIS, Cards, and more) — as configured by the merchant.

#### 🗂️ Section Management with Archive & Restore

Manage homepage content flexibly — add, edit, reorder, or remove sections. Removed sections and their content are stored in the **Archived Configuration** and can be fully restored at any time.

## How It Works

{% stepper %}
{% step %}

### Configure General Settings

Set up the merchant's visual identity — display name, logo, primary and secondary colors, and font. Upload legal documents (Terms and Conditions, Privacy Policy, About Us) that members may need to access.
{% endstep %}

{% step %}

### Add Sections to the Homepage

Create up to 3 customizable sections on the homepage. Choose between a **Widget** section for functional quick-access links integrated with DOKU Subscription and Billing, or a **Banner** section for news, announcements, and promotions.
{% endstep %}

{% step %}

### Share the Web App with Members

Members access the web app, log in with their registered mobile number, and are redirected to the customized homepage that reflects the merchant's configuration in real time.
{% endstep %}

{% step %}

### Members Pay Their Bills

Members select the billing widget, enter their Flexibill Member or Customer ID, view their unpaid invoices, and complete payment using DOKU Wallet or another payment method.

{% hint style="info" %}
🎬 **Want to see it in action?** Try the interactive demo before diving into the details. [Launch Demo](https://app.supademo.com/demo/cml7nirq600692u0i0hzn8l39?utm_source=link)
{% endhint %}
{% endstep %}
{% endstepper %}

## Capability Details

{% tabs %}
{% tab title="Section Configuration" %}

### Section Configuration

The Section Configuration allows merchants to manage and adjust the content displayed on the application's homepage — adding, editing, and organizing sections to match their business needs.

### Section Availability

| Item                            | Detail                                                         |
| ------------------------------- | -------------------------------------------------------------- |
| **Total section slots**         | 5 slots                                                        |
| **Merchant-customizable slots** | Up to 3 sections                                               |
| **Reserved by DOKU**            | 2 sections — **DOKU Biller** and **DOKU Banner**               |
| **Quota indicator**             | Shown as *e.g. 4/5* — sections generated out of total capacity |

Use the **Add Section** button to create a new section and assign it to an available slot.

### Section Types

There are two supported section types:

**1. Widget**

A Widget section enables merchants to configure navigational or functional quick-access components. Each Widget section can include:

* A section icon
* A section link
* Integration with DOKU Subscription and Billing services

**2. Banner**

A Banner section allows merchants to add visual content to the homepage — ideal for marketing messages or visual highlights. Supported content includes:

* News
* Announcements
* Promotions

### Creating a Section

{% stepper %}
{% step %}

### Add a Section

Click **Add Section** to open the section creation form. Select the **section type** (Widget or Banner) and assign the section to an available slot.

**Section Naming Rules**

Section names can be customized by the merchant with a maximum of **64 characters**.
{% endstep %}

{% step %}

### Add Section Content

Configure the content for the section based on its type.

**Widget Section — Content Requirements**

<table><thead><tr><th width="167.08203125">Field</th><th>Requirement</th></tr></thead><tbody><tr><td><strong>Display Banner</strong></td><td>Required. Formats: JPEG, PNG, JPG. Max file size: 5 MB. Min resolution: 300 × 300 px</td></tr><tr><td><strong>Content Type</strong></td><td>Choose one: <strong>Long Text</strong> (free text up to 2,000 characters for announcements or news) or <strong>Link</strong> (embedded URL in https format)</td></tr></tbody></table>
{% endstep %}

{% step %}

### Apply Section

After configuring the section and its content, click **Apply** to publish it to the homepage.

{% hint style="info" %}
Section changes can be applied once every **10 minutes**.
{% endhint %}
{% endstep %}
{% endstepper %}
{% endtab %}

{% tab title="General Configuration" %}

### General Configuration

The General Configuration allows merchants to manage their merchant identification and brand appearance. There are two tabs: **Appearance** and **Document**.

### 1. Appearance

Customize the visual identity of the application:

<table><thead><tr><th width="194.59375">Field</th><th>Requirement</th></tr></thead><tbody><tr><td><strong>Display Name</strong></td><td>Up to 32 characters</td></tr><tr><td><strong>Display Logo</strong></td><td>Formats: JPEG, JPG, PNG. Max file size: 1 MB. Min resolution: 300 × 300 px</td></tr><tr><td><strong>Primary Color</strong></td><td>Custom color selection</td></tr><tr><td><strong>Secondary Color</strong></td><td>Custom color selection</td></tr><tr><td><strong>Font</strong></td><td>Font style selection</td></tr></tbody></table>

### 2. Document

Upload documents that members may need to access within the app:

<table><thead><tr><th width="230.26953125">Document</th><th>Format</th></tr></thead><tbody><tr><td><strong>Terms and Conditions</strong></td><td>PDF</td></tr><tr><td><strong>Privacy Policy</strong></td><td>PDF</td></tr><tr><td><strong>About Us</strong></td><td>PDF</td></tr></tbody></table>
{% endtab %}

{% tab title="Archived Configuration" %}

### Archived Configuration

The Archived Configuration stores all previously removed sections and their content. Items are organized by their original section and the content that belongs to it.

Merchants can **restore** an entire section or individual section content from the archive.

### Restoration Rules

<table><thead><tr><th width="225.5234375">Action</th><th>Rule</th></tr></thead><tbody><tr><td><strong>Restore a section</strong></td><td>All content within that section is also restored. The section can only be restored if there is still an available slot on the homepage</td></tr><tr><td><strong>Restore section content</strong></td><td>The content is added back to the current active section on the homepage</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

## Customer Journey: Pay Your Bill

This section describes the end-to-end experience a member goes through when accessing the Billing Portal app and completing a bill payment.

{% stepper %}
{% step %}

### Login

The member opens the DOKU e-Wallet app and accesses the **Billing Presentment** feature. They enter their registered mobile number and receive an **OTP verification code** via SMS or WhatsApp to sign in.
{% endstep %}

{% step %}

### Register *(New Members Only)*

If the mobile number is not yet registered, the member is redirected to the registration page and must provide:

<table><thead><tr><th width="174.40234375">Field</th><th>Requirement</th></tr></thead><tbody><tr><td><strong>Email</strong></td><td>Must follow standard email format</td></tr><tr><td><strong>Full Name</strong></td><td>As per National ID (KTP)</td></tr></tbody></table>

Upon successful registration, the member is prompted to create a **6-digit Security PIN**, which is used to authorize all DOKU Wallet payments and transactions.
{% endstep %}

{% step %}

### Homepage

After a successful login or registration, the member is redirected to the **Homepage**. The interface dynamically reflects the custom configurations set in the Merchant Dashboard — including the merchant's branding, sections, and integrated billing widget.
{% endstep %}

{% step %}

### Inquiry

The member selects the **billing widget** on the homepage to view their outstanding bills.

1. Enter a registered **Flexibill Member ID** or **Customer ID**
2. Once the ID is verified, all unpaid invoices are displayed instantly
3. Select the bills to pay — the **oldest bills must be paid first** to keep the account current
4. After selecting bills, the member is directed to the **Payment Confirmation** page for a final review

<figure><img src="/files/FgHQ7sM8HxH8lSn1VPw4" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Payment

Payment can be completed using two methods:

**a. DOKU Wallet**

The member selects **DOKU Wallet** and enters their **transaction PIN** to authorize the payment.

<table><thead><tr><th width="208.61328125">Scenario</th><th>What Happens</th></tr></thead><tbody><tr><td><strong>Valid PIN</strong></td><td>Member is redirected to the Payment Successful page</td></tr><tr><td><strong>Incorrect PIN × 3</strong></td><td>Account is automatically locked for security purposes</td></tr></tbody></table>

<figure><img src="/files/72cELnBogCfxPO542tf9" alt=""><figcaption></figcaption></figure>

**b. Other Payment Methods**

The member selects **Other Payment Methods** to see a list of available options as configured in the Merchant Dashboard:

<table><thead><tr><th width="138.75390625">Method</th><th>Options</th></tr></thead><tbody><tr><td><strong>e-Wallet</strong></td><td>DOKU e-Wallet</td></tr><tr><td><strong>Cards</strong></td><td>Debit / Credit Card</td></tr><tr><td><strong>QRIS</strong></td><td>QRIS</td></tr><tr><td><strong>Bank Transfer</strong></td><td>Virtual Account — Permata Bank, BSI, Danamon, BRI, DOKU VA (Other Banks)</td></tr></tbody></table>

<figure><img src="/files/QLPYto17CcPJqNa88oyG" alt=""><figcaption></figcaption></figure>

Regardless of the chosen method, the member is redirected to the **Transaction Success Page** upon successful payment.
{% endstep %}

{% step %}

### Transaction Success

After payment is processed, the member sees the **Transaction Detail** page showing:

<table><thead><tr><th width="244.25390625">Field</th><th width="479.65625">Description</th></tr></thead><tbody><tr><td><strong>Total Paid</strong></td><td>The total amount successfully charged</td></tr><tr><td><strong>Member Name &#x26; ID</strong></td><td>The member's name and reference number</td></tr><tr><td><strong>Transaction Date &#x26; Time</strong></td><td>Timestamp of the payment</td></tr><tr><td><strong>Reference Number</strong></td><td>Unique transaction reference (e.g., BPT-20260413105020-474430)</td></tr><tr><td><strong>Bills Paid</strong></td><td>Summary of bills settled — with count of Failed, Processing, and Paid</td></tr><tr><td><strong>Invoice Detail</strong></td><td>Per-invoice breakdown with collection name, invoice number, date, and amount</td></tr></tbody></table>

<figure><img src="/files/PKxiem5T4n0zS7L84Glc" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

## Merchant & Customer Experience

### Merchant View

* Configure homepage sections, brand identity, and documents at **Billing Portal → Section Configuration / General Configuration**
* Manage archived sections and restore content at **Billing Portal → Archived Configuration**
* Payment methods available to members are configured from the Merchant Dashboard

### Member View

* Access the Billing Portal app
* Log in with a registered mobile number and OTP — or register as a new member
* View and pay outstanding invoices by entering their Flexibill Member or Customer ID
* Pay using DOKU Wallet (PIN-authorized) or other available payment methods
* View transaction detail and invoice breakdown after each successful payment

## Terms & Conditions

* Merchants can add up to **3 customizable sections** out of 5 total homepage slots — 2 slots are reserved for DOKU (DOKU Biller and DOKU Banner)
* Section names are limited to **64 characters**
* Widget section display banners must be JPEG, PNG, or JPG format — maximum 5 MB, minimum resolution 300 × 300 px
* Long Text content type supports up to **2,000 characters**
* Section changes can be applied once every **10 minutes**
* Display logo must be JPEG, JPG, or PNG — maximum 1 MB, minimum resolution 300 × 300 px
* Document uploads (Terms and Conditions, Privacy Policy, About Us) must be in **PDF** format
* Members must pay the **oldest outstanding invoice first** before settling newer ones
* An incorrect DOKU Wallet PIN entered **3 times** will automatically lock the account

## FAQ

<details>

<summary>How many sections can a merchant add to the homepage?</summary>

Merchants can add up to **3 customizable sections**. The remaining 2 out of 5 total slots are reserved by DOKU for DOKU Biller and DOKU Banner.

</details>

<details>

<summary>Can a removed section be recovered?</summary>

Yes. All removed sections and their content are stored in the **Archived Configuration**. Merchants can restore an entire section (along with all its content) or restore individual content items. A section can only be restored if there is still an available slot on the homepage.

</details>

<details>

<summary>How often can section changes be applied?</summary>

Section changes can be applied once every **10 minutes**.

</details>

<details>

<summary>Can members choose which bills to pay?</summary>

Members can select which invoices to settle, but the **oldest outstanding bills must be paid first**. The system enforces this order to keep the member's account current.

</details>

<details>

<summary>What happens if a member enters the wrong DOKU Wallet PIN?</summary>

If an incorrect PIN is entered **3 times consecutively**, the DOKU Wallet account is automatically locked for security purposes.

</details>

<details>

<summary>What payment methods are available in the Billing Portal?</summary>

Payment methods are configured by the merchant in the Merchant Dashboard. Available options include DOKU e-Wallet, Virtual Account (various banks), QRIS, and Cards.

</details>




---

[Next Page](/llms-full.txt/1)

